Files
dnf-utils/ace_test/aServer/GameServer.h
T
2025-12-06 16:42:21 +08:00

62 lines
1.5 KiB
C++

#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();
};