118 lines
5.2 KiB
C++
118 lines
5.2 KiB
C++
#ifndef _DB_NAME_SYNC_CLIENT_H_
|
||
#define _DB_NAME_SYNC_CLIENT_H_
|
||
|
||
class CDBServer;
|
||
|
||
class CNameSyncClient :
|
||
public CCustomJXClientSocket
|
||
{
|
||
public:
|
||
typedef CCustomJXClientSocket Inherited;
|
||
typedef VOID (CNameSyncClient::*OnHandleSockPacket)(CDataPacketReader &packet);
|
||
|
||
public:
|
||
CNameSyncClient(CDBServer *lpDBEngine);
|
||
~CNameSyncClient();
|
||
|
||
//投递申请角色ID的内部消息,申请角色ID成功或失败后(会处理超时),会向网关线程投递?消息
|
||
BOOL PostAllocateCharId(const int nSessionId, const int nServerIndex, LPCSTR sCharName,CREATEACTORDATA *pData);
|
||
//投递申请跨服角色ID的内部消息,申请角色ID成功或失败后(会处理超时),会向网关线程投递?消息
|
||
BOOL PostCrossServerAllocateCharId(const int nSessionId, const int nServerIndex, LPCSTR sCharName,CREATEACTORDATA *pData);
|
||
|
||
//投递申请帮会ID的内部消息,申请帮会ID成功或失败后(会处理超时),会向数据服务器线程投递?消息
|
||
//参数nOPIdent是调用者生成的具有唯一性的操作标识数据,当操作具有结果(成功、失败或超时)后
|
||
//向数据服务器投递的对应消息中将此值原样返回
|
||
BOOL PostAllocateGuildId(const int nServerIndex, LPCSTR sGuildName, const UINT_PTR nOPIdent);
|
||
//投递更改角色名称的内部消息,操作成功或失败后(会处理超时),会向数据服务器线程投递?消息
|
||
//参数nOPIdent是调用者生成的具有唯一性的操作标识数据,当改名操作具有结果(成功、失败或超时)后
|
||
//向数据服务器投递的对应消息中将此值原样返回
|
||
BOOL PostCharRename(const int nCharId, const int nServerIndex, LPCSTR sNewCharName, const UINT_PTR nOPIdent);
|
||
|
||
protected:
|
||
//覆盖发送注册客户端的消息
|
||
// VOID SendRegisteClient();
|
||
//覆盖发送保持连接消息的函数
|
||
//VOID SendKeepAlive();
|
||
//覆盖例行执行的函数,以便处理名称操作数据
|
||
VOID OnRun();
|
||
/* ★查询本地服务器的类型,以便正确的向会话服务器注册连接 */
|
||
jxSrvDef::SERVERTYPE getLocalServerType();
|
||
/*** 子类需覆盖的函数集 ***/
|
||
/* 处理单个通信数据包
|
||
* nCmd 通信消息命令
|
||
* inPacket 已经读取出通信命令的数据包,数据包的读取位置指向命令数据后的内容
|
||
*/
|
||
virtual VOID OnDispatchRecvPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket);
|
||
|
||
/* ★查询本地服务器的名称,以便正确的发送注册数据 */
|
||
virtual LPCSTR getLocalServerName();
|
||
private:
|
||
//向名称服务器发送新增加的名称操作数据
|
||
VOID SendNewNameOperateRequest();
|
||
VOID DefaultSockPacketHandler(CDataPacketReader &inPacket);
|
||
VOID AllocCharIdResultHandler(CDataPacketReader &inPacket);
|
||
VOID AllocGuildIdResultHandler(CDataPacketReader &inPacket);
|
||
VOID RenameCharResultHandler(CDataPacketReader &inPacket);
|
||
VOID RenameGuildResultHandler(CDataPacketReader &inPacket);
|
||
|
||
private:
|
||
//定义名称客户端与名称和ID操作相关的数据结构
|
||
struct NameOperateData
|
||
{
|
||
enum eNameOperateType
|
||
{
|
||
noAllocCharId = 1, //申请角色ID(客户端创建角色的时候用)
|
||
noAllocGuildId, //申请帮会ID(引擎服务器创建帮会的时候用)
|
||
noRenameChar, //角色重命名(引擎服务器修改角色名称的时候用)
|
||
noRenameGuild, //帮会冲命名(引擎服务器修改帮会名称的时候用)
|
||
noCSAllocCharId, //申请跨服角色ID()
|
||
} nOPType; //名称操作的类型
|
||
int nServerIndex; //服务器ID
|
||
char sName[128]; //名称字符串
|
||
TICKCOUNT dwTimeOut; //超时时间
|
||
union
|
||
{
|
||
//申请角色ID的数据
|
||
struct
|
||
{
|
||
int nSesionId; //全局会话ID
|
||
} allocCharId;
|
||
//申请帮会ID的数据
|
||
struct
|
||
{
|
||
UINT_PTR nOPIdent; //操作唯一标识(由数据客户端处理类内部产生,在操作具有结果原样返回)
|
||
} allocGuildId;
|
||
//申请修改帮会名称的数据
|
||
struct
|
||
{
|
||
unsigned int nGuildId; //帮会ID
|
||
UINT_PTR nOPIdent; //操作唯一标识(由数据客户端处理类内部产生,在操作具有结果原样返回)
|
||
} guildRename;
|
||
//申请修改角色名称的数据
|
||
struct
|
||
{
|
||
int nCharId; //角色ID
|
||
UINT_PTR nOPIdent; //操作唯一标识(由数据客户端处理类内部产生,在操作具有结果原样返回)
|
||
} renameChar;
|
||
};
|
||
void * pData; //缓存的数据指针
|
||
};
|
||
|
||
//查找名称操作指针,如果找到对应的数据,则返回数据指针,如果lpIndex非空则填充*lpIndex为数据在操作中列表中的索引
|
||
//如果serverindex为-1,则不限定查找条件
|
||
NameOperateData* GetNameOperatePtr(const NameOperateData::eNameOperateType eOPType, LPCSTR sName, OUT PINT_PTR lpIndex,int nServerIndex=-1);
|
||
//名称操作请求超时
|
||
VOID NameOperateTimedOut(const NameOperateData* lpOperate);
|
||
|
||
private:
|
||
CDBServer* m_pDBServer; //所属DB引擎
|
||
CBaseList<NameOperateData*> m_NameOperatingList; //正在操作的名称数据列表
|
||
CLockList<NameOperateData*> m_NewNameOperateList; //新增加的名称数据处理列表
|
||
CCSLock m_NewNameOperateListLock;//增加名称处理数据的列表锁
|
||
static const OnHandleSockPacket NSSockPacketHandlers[]; //结构化网络数据包处理函数列表
|
||
|
||
};
|
||
|
||
#endif
|
||
|