121 lines
3.3 KiB
C
121 lines
3.3 KiB
C
|
|
#ifndef _SESSION_HANDLE_H_
|
|||
|
|
#define _SESSION_HANDLE_H_
|
|||
|
|
/*****************************************************************
|
|||
|
|
Copyright (c) 2021, 上海漫方网络科技有限公司
|
|||
|
|
All rights reserved
|
|||
|
|
|
|||
|
|
创建日期: 2021年04月28日 14时01分
|
|||
|
|
文件名称: CrossDataHandle.h
|
|||
|
|
说 明: 跨服引擎分发消息
|
|||
|
|
|
|||
|
|
当前版本: 1.00
|
|||
|
|
作 者:
|
|||
|
|
概 述: 跨服引擎分发消息类
|
|||
|
|
|
|||
|
|
*****************************************************************/
|
|||
|
|
using namespace wylib::sync::lock;
|
|||
|
|
|
|||
|
|
class CCrossServerManager;
|
|||
|
|
class CCrossServer;
|
|||
|
|
|
|||
|
|
class ISessionRequestHost
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
/*
|
|||
|
|
* Comments: 分配数据包
|
|||
|
|
* Param const jxSrvDef::INTERSRVCMD nCmd:
|
|||
|
|
* @Return CDataPacket&:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
virtual CDataPacket& AllocDataPacket(const jxSrvDef::INTERSRVCMD nCmd) = 0;
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 刷新数据包到发送队列
|
|||
|
|
* Param CDataPacket &packet
|
|||
|
|
* @Return void:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
virtual void FlushDataPacket(CDataPacket &packet) = 0;
|
|||
|
|
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
using namespace jxSrvDef;
|
|||
|
|
class CCrossDataHandle :public ISessionRequestHost
|
|||
|
|
{
|
|||
|
|
friend class CCrossServer;
|
|||
|
|
protected:
|
|||
|
|
//VOID ProcessRecvBuffers(PDATABUFFER pDataBuffer);
|
|||
|
|
VOID DispatchRecvMsg(CDataPacketReader & reader);
|
|||
|
|
|
|||
|
|
//VOID SendKeepAlive();
|
|||
|
|
|
|||
|
|
//实现虚接口
|
|||
|
|
VOID OnPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket);
|
|||
|
|
public:
|
|||
|
|
CCrossDataHandle( );
|
|||
|
|
~CCrossDataHandle();
|
|||
|
|
|
|||
|
|
void SetParam(CCrossServer *pSessionSrv, bool isSessonConnect );
|
|||
|
|
|
|||
|
|
//获取服务器的id
|
|||
|
|
inline int GetServerId()
|
|||
|
|
{
|
|||
|
|
return m_nSelfServerId;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 处理来自逻辑服务器的请求传送到目标服务器消息
|
|||
|
|
* Param CatchDefaultPacket:
|
|||
|
|
* Param & inPacket:
|
|||
|
|
* @Return VOID:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
VOID CatchRequestTransmit(CDataPacketReader &inPacket) {};
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 收到战区的数据
|
|||
|
|
* Param CDataPacketReader & inPacket:
|
|||
|
|
* @Return VOID:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
VOID CatchGroupMessage(CDataPacketReader &inPacket) {};
|
|||
|
|
|
|||
|
|
|
|||
|
|
// VOID BroadcastMessage2Logic(CDataPacketReader &inPacket);
|
|||
|
|
|
|||
|
|
VOID BroadcastMessage2Logic(const INT_PTR nServerIndex, LPCSTR sMsg, const size_t dwSize);
|
|||
|
|
/*
|
|||
|
|
* Comments: 保存跨服排行榜
|
|||
|
|
* Param CDataPacketReader & inPacket:
|
|||
|
|
* @Return VOID:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
VOID CatchSaveCsRank(CDataPacketReader &inPacket) {};
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 获取跨服排行榜
|
|||
|
|
* Param CDataPacketReader & inPacket:
|
|||
|
|
* @Return VOID:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
VOID CatchLoadCsRank(CDataPacketReader &inPacket) {};
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
|
|||
|
|
static const size_t MaxSSDataSize = 4096;//向会话服务器发送的单个数据包大小的最大值
|
|||
|
|
static const size_t MaxForwardLogicDataSize = 40960; // 最大数据包为40k
|
|||
|
|
char *m_pForwardDataBuff; // 公共逻辑服务器SessionClient用于转发公共服务器消息的Buff,长度固定MaxForwardLogicDataSize
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
int m_nSelfServerId; //自身的服务器ID,用于数据转发
|
|||
|
|
CCrossServer* m_pSSServer; //所属会话服务器
|
|||
|
|
TICKCOUNT m_dwDisconnectedTick;//断开连接的时间
|
|||
|
|
char m_sTrServerIndex[24] ; //格式化的服务器的index,用于连接的时候快速计算
|
|||
|
|
bool m_bIsCrossSession; //是否是跨服的会话传输的client,跨服的会话有些东西要特殊处理下
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|