Files
mir_server/server/LogicServer/db/DataClient.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

102 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _DATA_CLIENT_H_
#define _DATA_CLIENT_H_
/***
本类主要用于逻辑服务器连接数据服务器,并发送信息
*/
class CCustomJXClientSocket;
class CLogicServer;
//保存认证信息的时间 10分钟超时超时
#define KEEPSESSIONDATA 600000
//保存加载用户认证信息的结构
typedef struct
{
unsigned int nSeesionId;
unsigned int nActorid;
unsigned long long dwTime;
} LOADACTORSTRUCT;
class CDataClient:
public CCustomJXClientSocket
{
typedef VOID (CDataClient::*OnHandleSockPacket)(CDataPacketReader &packet);
public:
CDataClient(CLogicServer * pLogicServer);
~CDataClient();
public:
// 以下函数用于逻辑服务器向数据服务器发送查询信息
//数据服务器返回角色的状态
BOOL OnQuerySessionData(UINT_PTR nSessionId,unsigned int nActorId);
/*
* Comments: 向db服务器发送简单的数据
如果是复杂数据使用 allocProtoPacket然后写入数据再flushProtoPacket
* Param INT_PTR nCmd: 命令码,如dcLoadQuest
* Param T data: 数据,可以是任何类型的
* @Return VOID:
*/
template<class T>
inline VOID SendDbServerData( INT_PTR nCmd ,T & data)
{
CDataPacket& DataPacket = allocProtoPacket((jxSrvDef::INTERSRVCMD)nCmd);
DataPacket << data;
flushProtoPacket(DataPacket);
}
//等待数据发送或转储完成
void WaitFor();
public:
// 回收空闲的CDataPacket类
void FreeBackUserDataPacket(CDataPacket* pDataPacket);
protected:
VOID OnLoadActorMsg(CDataPacketReader &inPacket);
// 以下是实现基类的虚函数
virtual VOID OnDispatchRecvPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket);
virtual jxSrvDef::SERVERTYPE getLocalServerType();
/* ★查询本地服务器的名称,以便正确的发送注册数据 */
virtual LPCSTR getLocalServerName();
/* ★查询本地服务器ID以便正确的发送注册数据默认的返回值是0 */
virtual int getLocalServerIndex();
CLogicServer* m_pLogic;
//提供向最外层逻辑通知连接建立的事件
virtual VOID OnConnected();
virtual void OnRountine()
{
CCustomJXClientSocket::OnRountine();
}
////提供向最外层逻辑通知连接断开的事件
//virtual VOID OnDisconnected()
//{
//}
private:
// 分配一个CDataPacket
CDataPacket* AllocSendPacket();
private:
static const OnHandleSockPacket SockPacketHandlers[]; //结构化网络数据包处理函数列表
CQueueList<CDataPacket*> m_vFreeList; //用来存放空闲的数据包
CCSLock m_vFreeListLock;
CBaseList<LOADACTORSTRUCT> m_vSeesionData; //用来保存用户认证信息的队列
RTL_CRITICAL_SECTION m_SessionLock;
};
#endif