#pragma once #include "framework/cpp/protoutils.h" namespace a8 { class TcpClient; } struct timer_list; class TargetConn { public: int instance_id = 0; std::string remote_ip; int remote_port = 0; int matching_player_num = 0; a8::tick_t last_pong_tick = 0; public: void Init(int instance_id, const std::string& remote_ip, int remote_port); void UnInit(); void Open(); void Close(); bool Connected(); template void SendMsg(T& msg) { static int msgid = f8::Net_GetMessageId(msg); #if 1 f8::Net_SendProxyCMsg(tcp_client_, msgid, msg); #else f8::Net_SendMsg(tcp_client_, 0, msgid, msg); #endif } void ForwardClientMsg(f8::MsgHdr& hdr); private: void on_error(a8::TcpClient* sender, int errorId); void on_connect(a8::TcpClient* sender); void on_disconnect(a8::TcpClient* sender); void on_socketread(a8::TcpClient* sender, char* buf, unsigned int len); void CheckAlive(); private: char *recv_buff_ = nullptr; unsigned int recv_bufflen_ = 0; a8::TcpClient* tcp_client_ = nullptr; timer_list* timer_ = nullptr; };