init
This commit is contained in:
268
server/SessionServer/SessionDataHandle.h
Normal file
268
server/SessionServer/SessionDataHandle.h
Normal file
@@ -0,0 +1,268 @@
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user