102 lines
2.6 KiB
C
102 lines
2.6 KiB
C
|
|
#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
|