#pragma once #include "GameProto.h" namespace Game { class LoginRequest; class ClientTickPacket; class HeartBeat; class UGCRequest; class GameReportReq; class NetbaraStatusReq; } struct GameClient { int32_t agent_id; cyclone::TcpConnectionPtr connection; std::string gameAccoundID; int32_t gameWorldID; AceSdkAccount aceAccount; }; class GameServer { public: static GameServer* getSingleton(); public: void startAndJoin(uint16_t server_port); GameClient* getClient(int32_t client_id); void onUGCCallback(int32_t connID, int32_t ctxID, const AceSdkUicJudgeResultInfoBatchMultiText* result_info); protected: void onClientConnected(cyclone::TcpConnectionPtr conn); void onClientMessage(cyclone::TcpConnectionPtr conn); void onClientClose(cyclone::TcpConnectionPtr conn); protected: void tick(); void onClientLoginRequest(cyclone::TcpConnectionPtr conn, Game::LoginRequest* request); void onClientTickPacket(cyclone::TcpConnectionPtr conn, Game::ClientTickPacket* request); void onClientHeartBeat(cyclone::TcpConnectionPtr conn, Game::HeartBeat* request); void onUGCRequest(cyclone::TcpConnectionPtr conn, Game::UGCRequest* request); void onReportRequest(cyclone::TcpConnectionPtr conn, Game::GameReportReq* request); void onNetbarRequest(cyclone::TcpConnectionPtr conn, Game::NetbaraStatusReq* request); private: std::map< int32_t, GameClient > m_clients; std::map< std::string, int32_t > m_accountToConnectionID; cyclone::sys_api::mutex_t m_clients_lock; int32_t m_tickSleepSwitch = 0; public: GameServer(); ~GameServer(); };