60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
#pragma once
|
||
|
||
class CCustomJXServerClientSocket :
|
||
public CCustomServerClientSocket
|
||
{
|
||
public:
|
||
typedef CCustomServerClientSocket Inherited;
|
||
|
||
public:
|
||
//按通信协议申请一份发送数据包,nCmd是通信消息号,
|
||
//数据包填充完毕后需要调用flushProtoPacket提交到发送队列
|
||
CDataPacket& allocProtoPacket(const jxSrvDef::INTERSRVCMD nCmd);
|
||
|
||
//提交发送数据包到发送缓冲,会自动计算数据长度并向数据包的通信协议头部分写入长度值
|
||
VOID flushProtoPacket(CDataPacket& packet);
|
||
|
||
//服务器是否注册
|
||
inline bool registed(){ return m_boRegisted; }
|
||
//获取连接的服务器ID
|
||
inline unsigned int getClientServerIndex(){ return m_nClientSrvIdx; }
|
||
//获取连接的服务器名称
|
||
inline LPCSTR getClientName(){ return m_sClientName; }
|
||
//获取连接的服务器类型
|
||
inline jxSrvDef::SERVERTYPE getClientType(){ return m_eClientType; };
|
||
|
||
public:
|
||
CCustomJXServerClientSocket();
|
||
|
||
protected:
|
||
/*** 子类需覆盖的函数集 ***/
|
||
/* 处理单个通信数据包
|
||
* nCmd 通信消息命令
|
||
* inPacket 已经读取出通信命令的数据包,数据包的读取位置指向命令数据后的内容
|
||
*/
|
||
virtual VOID OnDispatchRecvPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket) = 0;
|
||
/* 验证客户端注册数据是否有效
|
||
*@return 返回true表示注册数据有效并,返回false则关闭连接
|
||
*/
|
||
virtual bool OnValidateRegData(const jxSrvDef::PSERVER_REGDATA pRegData) = 0;
|
||
|
||
/*
|
||
* Comments: 客户端验证通过
|
||
* @Return void:
|
||
* @Remark:
|
||
*/
|
||
virtual void OnRegDataValidated(){};
|
||
|
||
VOID SendKeepAlive();
|
||
protected:
|
||
/* 覆盖父类的网络数据包处理函数以便实现通信协议的数据包解析 */
|
||
VOID ProcessRecvBuffers(PDATABUFFER pDataBuffer);
|
||
/* 覆盖父类连接断开的函数以便情况注册数据,从而使得对象可以重用 */
|
||
VOID Disconnected();
|
||
private:
|
||
bool m_boRegisted; //客户端是否已经注册连接
|
||
unsigned int m_nClientSrvIdx; //客户端的服务器ID
|
||
CHAR m_sClientName[40]; //客户端注册的服务器名称
|
||
jxSrvDef::SERVERTYPE m_eClientType; //客户端注册的服务器类型
|
||
};
|