#pragma once //game client listener namespace a8 { class TcpListener; } class GGListener : public a8::Singleton { private: GGListener() {}; friend class a8::Singleton; public: enum { HID = HID_GGListener }; public: void Init(); void UnInit(); template void SendProxyMsg(int sockhandle, T& msg) { static int msgid = f8::Net_GetMessageId(msg); f8::Net_SendProxyMsg(tcp_listener_, sockhandle, 0, 0, msgid, msg); } template void SendToClient(int sockhandle, unsigned int seqid, T& msg) { static int msgid = f8::Net_GetMessageId(msg); f8::Net_SendProxyMsg(tcp_listener_, sockhandle, seqid, 0, msgid, msg); } void SendText(int sockhandle, const std::string& text); void SendError(int sockhandle, unsigned int seqid, int error_code, const std::string& error_msg, const char* file = nullptr, int lineno = 0, int error_param = 0); void ForceCloseClient(int sockhandle); void ForceCloseChildSocket(int sockhandle); void MarkClient(int sockhandle, bool is_active); long long GetSendNodeNum(); long long GetSentNodeNum(); long long GetSentBytesNum(); private: void OnListenError(int errorid); private: a8::TcpListener *tcp_listener_ = nullptr; };