/** * socket 服务端 * */ #ifndef SOCKETENGINE_H #define SOCKETENGINE_H #include "AppCommon.h" #include "MyYaml.h" #include "myutils.h" #include "EngineBase.h" #include "EngineFactory.h" #include #include #include #include #include #include #include #include #include #include // select #include #include using namespace ai_matrix; class SocketEngine : public ai_matrix::EngineBase { public: SocketEngine(); ~SocketEngine(); APP_ERROR Init() override; APP_ERROR DeInit() override; APP_ERROR Process() override; bool Socket_(int port); bool Bind(); bool Listen(int queue_len = 20); bool Accept(); bool Run(); bool Recv(int nums); static void *sendInfo(void* arg); // 发送消息给指定IP的客户端 static bool SendClient(std::map > mmap, const std::string ip, const std::string message); // 发送消息给所有的客户端 static bool SendAllClient(std::map > mmap, const std::string message); static void* heart_handler(void* arg); //解析命令 static bool getOrder(const std::string &recv, Json::Value &order); //组织接口反馈内容 std::string getFeedBack(const std::string poundNo, const std::string type, const std::string info); std::string HexToStr(const std::string &str); std::string StrToHex(const std::string &str); private: int channel_; std::string rfidIP_; std::string strPort0_; // soket开启状态 int socketOpenType_; // 端口 int socketPort_; // 队列最大长度 int socketQueueLen_; const int QUEUE_SIZE = 20;// socket缓冲队列大小 struct sockaddr_in server_addr; socklen_t server_addr_len; int listen_fd; // 监听的fd int max_fd; // 最大的fd fd_set master_set; // 所有fd集合,包括监听fd和客户端fd fd_set working_set; // 工作集合 struct timeval timeout; std::string Heart_Beat; std::map > mmap; // 记录连接的客户端fd--> }; ENGINE_REGIST(SocketEngine) #endif