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
|
||
|