104 lines
3.7 KiB
C++
104 lines
3.7 KiB
C++
#ifndef _GATEMANAGER_H_
|
||
#define _GATEMANAGER_H_
|
||
|
||
|
||
class CDBServer;
|
||
class CDBGateManager
|
||
: public CCustomGateManager
|
||
{
|
||
public:
|
||
friend class CDBGate;
|
||
typedef CCustomGateManager Inherited;
|
||
public:
|
||
CDBGateManager(CDBServer *lpDBEngine);
|
||
~CDBGateManager();
|
||
|
||
//初始化
|
||
VOID Initialize();
|
||
//卸载
|
||
VOID Uninitialize();
|
||
/* 投递创建通过名称服务器申请角色名称的结果 */
|
||
inline VOID PostAllocCharIdResult(int nSessionId, jxInterSrvComm::NameServerProto::NAMESERVER_OPERROR eError, const int nCharId)
|
||
{
|
||
PostInternalMessage(GTIM_ALLOC_CHARID_RESULT, nSessionId, eError, nCharId);
|
||
}
|
||
/*
|
||
* Comments: 收到逻辑发来的玩家的登陆认证数据
|
||
* Param const unsigned int nSessionID: 账户的id
|
||
* Param unsigned int nActorID: 角色的ID
|
||
* @Return VOID:
|
||
*/
|
||
inline VOID PostLogicResponseSessionData(const unsigned int nSessionID,unsigned int nActorID)
|
||
{
|
||
PostInternalMessage(LOGIC_RESPONSE_DB_SESSION_DATA, nSessionID, nActorID,0);
|
||
}
|
||
/* 停止网关服务器 */
|
||
VOID Stop();
|
||
|
||
// 获取优选职业(当前最少的职业)
|
||
int GetPriorityJob(int nSrvIdx);
|
||
// 获取可以选择的阵营(阵营人数低于35%的才能选择),返回按位的掩码
|
||
int GetOptionalZy(int nSrvIdx);
|
||
// 获取优选阵营(当前最少的阵营)
|
||
tagZhenying GetPriorityZY(int nSrvIdx);
|
||
|
||
inline CSQLConenction* GetSQLConnectionPtr() { return &m_SQLConnection; }
|
||
|
||
protected:
|
||
/* 返回异步查询网关中是否存在指定会话ID的用户的结果 */
|
||
VOID OnResultGateUserExists(int nSessionId, const BOOL boOnline);
|
||
//进行内部消息的处理分派
|
||
virtual VOID DispatchInternalMessage(UINT uMsg, UINT64 uParam1, UINT64 uParam2, UINT64 uParam3,UINT64 uParam4);
|
||
VOID OnRun();
|
||
|
||
private:
|
||
BOOL ConnectSQL();
|
||
/* 处理名称服务器返回申请角色ID的结果
|
||
* nError 错误代码,0表示成功
|
||
* nCharId 当错误代码为0时有效,表示名称服务器分配的角色ID
|
||
*/
|
||
VOID AllocCharIdResult(const int nSessionId, const INT_PTR nError, const int nCharId);
|
||
|
||
//逻辑收到玩家的验证的数据
|
||
VOID LogicResponseSessionData(const unsigned int nSessionId,unsigned int nActorId);
|
||
// DB连接成功(初始化阵营和职业数据)
|
||
VOID OnDBConnected();
|
||
// DB服务器启动的时候自动加载玩家阵营分布数据
|
||
VOID LoadZyInitData();
|
||
// 保存玩家阵营分布数据(定时保存)
|
||
VOID SaveZyData();
|
||
|
||
// 新玩家创号
|
||
void OnNewPlayerCreated(int nSrvIdx, tagZhenying zy, tagActorVocation voc);
|
||
// DB服务器启动的时候自动加载玩家职业分布数据
|
||
VOID LoadJobInitData();
|
||
// 保存玩家职业分布数据(定时保存)
|
||
VOID SaveJobData();
|
||
|
||
|
||
|
||
private:
|
||
CDBGate m_Gates[MaxGateCount]; //网关列表
|
||
CDBServer* m_pDBServer; //所属DBEngine
|
||
CSQLConenction m_SQLConnection; //网关数据库连接对象
|
||
TICKCOUNT m_dwReconnectSQLTick; //下次重新连接数据库的时间
|
||
|
||
// 用于创建角色选择阵营和职业
|
||
bool m_bLoadZyJobData;// 是否已经加载了初始的阵营、职业分布数据(针对DB断开重连的情况)
|
||
wylib::container::CBaseList<PlayerZYDistribute> m_vecZyDist; // 玩家阵营分布
|
||
wylib::container::CBaseList<PlayerJobDistribute> m_vecJobDist; // 玩家职业分布
|
||
bool m_bZyDataDirty;
|
||
bool m_bJobDataDirty;
|
||
CCSLock m_zyLock;
|
||
CCSLock m_jobLock;
|
||
TICKCOUNT m_nNextZyJobSaveTime;
|
||
private:
|
||
//申请角色ID返回(此消息由NSClient发送)(Param1=会话ID,Param2=操作结果,Param3=角色ID(仅在操作成功时有效))
|
||
static const UINT_PTR GTIM_ALLOC_CHARID_RESULT = 10001;
|
||
static const UINT_PTR LOGIC_RESPONSE_DB_SESSION_DATA = 10002; //逻辑服务器返回收到了玩家的登陆的会话数据
|
||
|
||
};
|
||
|
||
|
||
#endif
|