Files
mir_server/server/SessionServer/SessionDataHandle.h

269 lines
7.0 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _SESSION_HANDLE_H_
#define _SESSION_HANDLE_H_
using namespace wylib::sync::lock;
class CSSManager;
class CSessionServer;
#include "AMProcto.h"
#include "AMClient_tx.h"
/************************************************************
*
*
*
***********************************************************/
using namespace jxSrvDef;
class CSessionDataHandle :
public ISessionRequestHost
{
friend class CSessionServer;
public:
static const size_t MaxSSDataSize = 4096;//向会话服务器发送的单个数据包大小的最大值
typedef VOID (CSessionDataHandle::*OnHandleSockPacket)(CDataPacketReader &packet);
static const size_t MaxForwardLogicDataSize = 40960; // 最大数据包为40k
//大型SQL查询语句缓冲长度
static const SIZE_T dwHugeSQLBufferSize = 1024 * 1024 * 2;
char *m_pForwardDataBuff; // 公共逻辑服务器SessionClient用于转发公共服务器消息的Buff长度固定MaxForwardLogicDataSize
private:
int m_nCommServerId; // 公共逻辑服务器Id如果自己是公共服务器那么此ID设置为0
int m_nSelfServerId; //自身的服务器ID,用于数据转发
INT m_nUserCount; //在线人数
INT m_nUserLimit; //人数上限
INT m_nMaxUserCount; //在本次日志记录中的最高在线人数记录人数日志后此值被还原为m_nUserCount
CSessionServer* m_pSSServer; //所属会话服务器
CSQLConenction* m_pSQLConnection; //数据库连接程序
TICKCOUNT m_dwDisconnectedTick;//断开连接的时间
PCHAR m_pHugeSQLBuffer; //大型SQL查询语句缓冲长度为dwHugeSQLBufferSize
char m_sTrServerIndex[24] ; //格式化的服务器的index用于连接的时候快速计算
bool m_bIsCrossSession; //是否是跨服的会话传输的client跨服的会话有些东西要特殊处理下
protected:
//VOID ProcessRecvBuffers(PDATABUFFER pDataBuffer);
VOID DispatchRecvMsg(CDataPacketReader & reader);
//VOID SendKeepAlive();
//实现虚接口
VOID OnPacket(const jxSrvDef::INTERSRVCMD nCmd, CDataPacketReader &inPacket);
protected:
/*
* Comments:
* Param const jxSrvDef::INTERSRVCMD nCmd:
* @Return CDataPacket&:
* @Remark:
*/
//virtual CDataPacket& AllocDataPacket(const jxSrvDef::INTERSRVCMD nCmd)
//{
//}
/*
* Comments:
* Param CDataPacket &packet
* @Return void:
* @Remark:
*/
//virtual void FlushDataPacket(CDataPacket &packet) {}
/*
* Comments: 1
* Parameter: unsigned int nAccountId
* Parameter: UINT64 lCard:
* Parameter: char * sAccountName:
* @Return int:,0-1-2
*/
int isInvalidNewUserCard(unsigned int nAccountId, UINT64 lCard,char * sAccountName =NULL);
private:
static const OnHandleSockPacket SSSockPacketHandlers[]; //结构化网络数据包处理函数列表
public:
CSessionDataHandle( );
~CSessionDataHandle();
void SetParam(CSessionServer *pSessionSrv,CSQLConenction *pSqlConn, bool isSessonConnect );
//获取公共服的id
inline int GetCommonServerId() const
{
if( m_nCommServerId == 0)
{
return m_nSelfServerId;
}
else
{
return m_nCommServerId;
}
}
//获取服务器的id
inline int GetServerId()
{
return m_nSelfServerId;
}
VOID CatchDefaultPacket(CDataPacketReader &inPacket);
VOID CatchCloseSession(CDataPacketReader &inPacket);
VOID CatchUpdateSession(CDataPacketReader &inPacket);
VOID CatchQuerySessionResult(CDataPacketReader &inPacket);
VOID CatchOnlineCount(CDataPacketReader &inPacket);
VOID CatchLoadUserItem(CDataPacketReader &inPacket);
VOID CatchGetUserItem(CDataPacketReader &inPacket);
VOID CatchRemoveUserItem(CDataPacketReader &inPacket);
VOID CatchAddValueCard(CDataPacketReader &inPacket);
VOID CatchQueryAddValueCard(CDataPacketReader &inPacket);
// 查询元宝数量
VOID CatchQueryYuanbaoCount(CDataPacketReader &inPacket);
// 提取元宝
VOID CatchWithdrawYuanbao(CDataPacketReader &inPacket);
//确认登陆了
VOID CatchConformOpenSession(CDataPacketReader &inPacket);
/*
* Comments:
* Param CatchDefaultPacket:
* Param & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchRequestTransmit(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchGroupMessage(CDataPacketReader &inPacket);
//检测用户名密码
VOID CatchCheckUserPassword(CDataPacketReader &inPacket);
//创建账户
VOID CatchCreateAccount(CDataPacketReader &inPacket);
// 发送AMC应答消息给逻辑服务器
void sendAMCMsgAck(const CAMClient::AMOPDATA & data);
//发送任务给逻辑服务器应答
void SendAmTaskAck(const CAMClient::TASKMSG & data);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchBroadcastMessage(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchSaveCsRank(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchLoadCsRank(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchClearCsRank(CDataPacketReader &inPacket);
//设置跨服的数据库ID
VOID SetCommonServerId(CDataPacketReader &inPacket);
//检测玩家是否合法,返回错误码
int CheckUserValid(PCHAR name, PCHAR passwd, GLOBALSESSIONOPENDATA & sessiDonata,PCHAR md5,PCHAR sCurrentTime,bool checkMd5,bool bCommonSrvLogin,PCHAR identity,bool &isWhiteIpLogin,int nRawServerindex=0);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatGetContrlCenterMsg(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatQQMsg(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatSendCommonPlatformData(CDataPacketReader &inPacket);
/*
* Comments:
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatRetranToCommonPlatform(CDataPacketReader &inPacket);
/*
* Comments: IP线
* Param CDataPacketReader & inPacket:
* @Return VOID:
* @Remark:
*/
VOID CatchSealIp(CDataPacketReader &inPacket);
/*
* Comments: IP
* Parameter: CDataPacketReader & inPacket:
* @Return VOID:
*/
VOID CatchUnSealIp(CDataPacketReader &inPacket);
//字符串的ip转整型的
long long GetIntIp(char *sIp);
};
#endif