mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-28 03:09:24 +08:00
实现HTTP服务架构
This commit is contained in:
@@ -11,6 +11,12 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
enum class ETcpType
|
||||
{
|
||||
SERVER = 0,
|
||||
CLIENT = 1,
|
||||
};
|
||||
|
||||
enum class ETcpEvent
|
||||
{
|
||||
NUL = 0, //
|
||||
@@ -32,80 +38,54 @@ class TcpEntity : public CommEntity, public std::enable_shared_from_this<TcpEnti
|
||||
public:
|
||||
struct Client
|
||||
{
|
||||
std::string clientId;
|
||||
SOCKET sock;
|
||||
SOCKADDR_IN sock_addr;
|
||||
SOCKADDR_IN sockaddr;
|
||||
std::string host;
|
||||
std::shared_ptr<TcpParser> parser = nullptr;
|
||||
};
|
||||
|
||||
public:
|
||||
// 初始化服务端
|
||||
TcpEntity(TcpHandler* handler = nullptr);
|
||||
TcpEntity();
|
||||
~TcpEntity();
|
||||
|
||||
int start() override;
|
||||
void close() override;
|
||||
|
||||
void runThreadTcp();
|
||||
|
||||
void setHost(string host, int port, bool is_client);
|
||||
std::string host() { return host_; }
|
||||
int port() { return port_; }
|
||||
std::string hostport() { return host_ + ":" + std::to_string(port_); }
|
||||
void setAddr(string host, int port, int commtype);
|
||||
std::string getAddr() { return addr; }
|
||||
std::string getAddrPort() { return addr + ":" + std::to_string(port); }
|
||||
int getPort() { return port; }
|
||||
|
||||
void setReconnect(int ms);
|
||||
|
||||
bool isClient() { return isClient_; }
|
||||
|
||||
void setHandler(TcpHandler* handler);
|
||||
|
||||
bool sendData(std::string data, std::string clientId="");
|
||||
|
||||
bool isAlive();
|
||||
bool isConnected();
|
||||
|
||||
|
||||
std::shared_ptr<TcpParser> parser = nullptr;
|
||||
bool write(std::string data);
|
||||
|
||||
private:
|
||||
void runServerLoop();
|
||||
void runServerRecvLoop(Client client, std::string client_name);
|
||||
|
||||
void runClientLoop();
|
||||
|
||||
private:
|
||||
// 本机的SOCKET对象
|
||||
SOCKET sock_ = INVALID_SOCKET;
|
||||
SOCKET sock = INVALID_SOCKET;
|
||||
|
||||
// socket addr信息
|
||||
SOCKADDR_IN sockaddr_;
|
||||
|
||||
// TCP类型是否是客户端: true: 客户端, false: 服务端
|
||||
bool isClient_ = true;
|
||||
SOCKADDR_IN sockaddr {};
|
||||
|
||||
// 通讯地址,作为客户端时有效
|
||||
std::string host_;
|
||||
std::string addr;
|
||||
|
||||
// 通讯端口
|
||||
int port_ = 0;
|
||||
int port = 0;
|
||||
|
||||
// 重连间隔时间,单位秒
|
||||
int tReconnect_ = 0;
|
||||
|
||||
// 作为服务端时连接的客户端SOCKET
|
||||
std::vector<Client> vecClient_;
|
||||
|
||||
// 回调处理对象
|
||||
TcpHandler* handler_ = nullptr;
|
||||
|
||||
bool isAlive_ = false;
|
||||
bool isCloseRequest_ = false;
|
||||
bool isConnected_ = false;
|
||||
std::vector<Client> vecClient;
|
||||
|
||||
// 状态更新时间戳
|
||||
int64_t ts_;
|
||||
int64_t ts_ = 0;
|
||||
|
||||
int64_t tsHeartbeat_=0;
|
||||
int64_t tsHeartbeat_ = 0;
|
||||
};
|
||||
|
||||
class TcpHandler
|
||||
|
||||
Reference in New Issue
Block a user