62 lines
1.5 KiB
C++
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();
|
|
};
|
|
|
|
|