Train_Identify/nvidia_ascend_engine/common_engine/SocketEngine/SocketEngine.h

109 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* socket 服务端
* */
#ifndef SOCKETENGINE_H
#define SOCKETENGINE_H
#include "AppCommon.h"
#include "MyYaml.h"
#include "myutils.h"
#include "EngineBase.h"
#include "EngineFactory.h"
#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <thread>
#include <signal.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/select.h> // select
#include <sys/ioctl.h>
#include <sys/time.h>
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<int, std::pair<std::string, int> > mmap, const std::string ip, const std::string message);
// 发送消息给所有的客户端
static bool SendAllClient(std::map<int, std::pair<std::string, int> > 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<int, std::pair<std::string, int> > mmap; // 记录连接的客户端fd--><ip, count>
};
ENGINE_REGIST(SocketEngine)
#endif