📄 packethandler.cpp
字号:
#include "stdafx.h"
#include "PacketHandler.h"
/// DBProxy - Game Server
#include <Protocol_ServerCommon.h>
#include <PacketStruct_DG.h>
#include "Handler_FromGameServer.h"
#include <Protocol_ServerCommon.h>
#include <PacketStruct_MX.h>
#include <PacketStruct_AD.h>
#include <PacketStruct_DM.h>
#include <PacketStruct_DW.h>
#include <PacketStruct_DZ.h>
#include "Handler_FromMasterServer.h"
#include "Handler_FromAgentServer.h"
#include "Handler_FromGuildServer.h"
#include "Handler_FromWorldServer.h"
#include "Handler_Common.h"
PacketHandler::PacketHandler()
{
BOOL rt = Resister();
ASSERT(rt);
}
PacketHandler::~PacketHandler()
{
}
BOOL PacketHandler::Resister()
{
#define HANDLER_COMMON( type, c, p ) if( !AddHandler( type, c, p, Handler_Common::On##p ) ) return FALSE
#define HANDLER_AGENT( c, p ) if( !AddHandler( PACKET_HANDLER_AGENT, c, p, Handler_FromAgentServer::On##p ) ) return FALSE
#define HANDLER_GAME( c, p ) if( !AddHandler( PACKET_HANDLER_GAME, c, p, Handler_FromGameServer::On##p ) ) return FALSE
#define HANDLER_WORLD( c, p ) if( !AddHandler( PACKET_HANDLER_WORLD, c, p, Handler_FromWorldServer::On##p ) ) return FALSE
#define HANDLER_GUILD( c, p ) if( !AddHandler( PACKET_HANDLER_GUILD, c, p, Handler_FromGuildServer::On##p ) ) return FALSE
#define HANDLER_MASTER( c, p ) if( !AddHandler( PACKET_HANDLER_MASTER, c, p, Handler_FromMasterServer::On##p ) ) return FALSE
//------------------------------------------------------------------------------------------------------------
// AGENT
//------------------------------------------------------------------------------------------------------------
HANDLER_COMMON( PACKET_HANDLER_AGENT, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_SYN );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_DBR );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_CREATE_SYN );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_CREATE_DBR );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_DESTROY_SYN );
HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_DESTROY_DBR );
//------------------------------------------------------------------------------------------------------------
// GAME
//------------------------------------------------------------------------------------------------------------
HANDLER_COMMON( PACKET_HANDLER_GAME, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_GAME(DG_WAREHOUSE,DG_WAREHOUSE_START_SYN);
HANDLER_GAME(DG_WAREHOUSE,DG_WAREHOUSE_START_DBR);
HANDLER_GAME(DG_WAREHOUSE,DG_WAREHOUSE_END_SYN);
HANDLER_GAME(DG_ITEM,DG_ITEM_SERIAL_SYN);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_ALL_REQ_SYN);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_ALL_REQ_DBR );
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_CHAR_ITEM_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_SKILL_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_QUICK_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_STYLE_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_QUEST_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_WAREHOUSE_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_UDPATE_SYN);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_UDPATE_CMD);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_UDPATE_DBR);
HANDLER_GAME(DG_CHARINFO,DG_CHARINFO_UDPATE_CMD_DBR);
HANDLER_GAME(DG_EVENT,DG_EVENT_SELECT_SYN);
HANDLER_GAME(DG_EVENT,DG_EVENT_SELECT_DBR);
HANDLER_GAME(DG_EVENT,DG_EVENT_UPDATE_SYN);
HANDLER_GAME(DG_EVENT,DG_EVENT_UPDATE_DBR);
//------------------------------------------------------------------------------------------------------------
// MASTER
//------------------------------------------------------------------------------------------------------------
#ifdef _USING_ACCOUNT_DBPROXY_SERVER
HANDLER_MASTER( MX_CONNECTION, MX_CONNECTION_REQ_SERVER_INFO_SYN );
HANDLER_MASTER( MX_CONNECTION, MX_CONNECTION_REQ_SERVER_INFO_DBR );
#else
HANDLER_MASTER( DM_CONNECTION, DM_CONNECTION_SERVER_INFO_CMD );
HANDLER_MASTER( 0, SERVERCOMMON_SERVERSHUTDOWN_REQ );
#endif
//------------------------------------------------------------------------------------------------------------
// WORLD
//------------------------------------------------------------------------------------------------------------
HANDLER_COMMON( PACKET_HANDLER_WORLD, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_GETLIST_SYN ); //< 模备 格废
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_ADD_SYN ); //< A->B add friend
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_DEL_SYN ); //< 模备 昏力
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_BLOCK_SYN ); //< 蜡历 瞒窜
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_BLOCK_FREE_SYN ); //< 瞒窜 昏力
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_GETLIST_DBR ); //< 模备 格废
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_ADD_DBR ); //< A->B add friend
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_DEL_DBR ); //< 模备 昏力
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_BLOCK_DBR ); //< 蜡历 瞒窜
HANDLER_WORLD( DW_FRIEND, DW_FRIEND_BLOCK_FREE_DBR ); //< 瞒窜 昏力
//------------------------------------------------------------------------------------------------------------
// GUILD
//------------------------------------------------------------------------------------------------------------
HANDLER_COMMON( PACKET_HANDLER_GUILD, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_SELECT_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_SELECT_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_SELECT_MEMBER_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_CREATE_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_CREATE_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_DESTROY_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_DESTROY_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_JOIN_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_JOIN_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_WITHDRAW_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_WITHDRAW_DBR );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_CHANGE_POSITION_SYN );
HANDLER_GUILD(DZ_GUILD, DZ_GUILD_CHANGE_POSITION_DBR );
return TRUE;
}
BOOL PacketHandler::AddHandler( ePACKET_HANDLER PHandler, BYTE category, BYTE protocol, fnHandler fnHandler )
{
HANDLER_FUNC * pFuncInfo = new HANDLER_FUNC;
pFuncInfo->m_dwFunctionKey = MAKEWORD( category, protocol );
pFuncInfo->m_fnHandler = fnHandler;
return m_FuncMap[PHandler].Add( pFuncInfo );
}
VOID PacketHandler::ParsePacket( ePACKET_HANDLER PHandler, ServerSession * pSession, MSG_BASE *pMsg, WORD wSize )
{
if( pMsg->m_byCategory == 0xff )
{
}
HANDLER_FUNC * pFuncInfo = (HANDLER_FUNC *)m_FuncMap[PHandler].Find( MAKEWORD( pMsg->m_byCategory, pMsg->m_byProtocol ) );
if( pFuncInfo == NULL )
{
DISPMSG( "[PacketHandler::ParsePacket] Invalid packet! Category[%u] Protocol[%u] ", pMsg->m_byCategory, pMsg->m_byProtocol );
ASSERT( ! "Invalid packet from Server!" ) ;
return ;
}
pFuncInfo->m_fnHandler( pSession, pMsg, wSize );
}
/*
PacketHandler::PacketHandler()
{
m_pFuncMap_DG = new FunctionMap;
m_pFuncMap_MX = new FunctionMap;
m_pFuncMap_AD = new FunctionMap;
m_pFuncMap_DW = new FunctionMap;
m_pFuncMap_DZ = new FunctionMap;
ResisterHandler_DG();
ResisterHandler_MX();
ResisterHandler_AD();
ResisterHandler_DW();
ResisterHandler_DZ();
}
PacketHandler::~PacketHandler()
{
SAFE_DELETE( m_pFuncMap_DG );
SAFE_DELETE( m_pFuncMap_MX );
SAFE_DELETE( m_pFuncMap_AD );
SAFE_DELETE( m_pFuncMap_DW );
SAFE_DELETE( m_pFuncMap_DZ );
}
BOOL PacketHandler::ResisterHandler_AD()
{
#define HANDLER_AD( c, p ) if( !AddHandler_AD( c, p, Handler_FromAgentServer::On##p ) ) return FALSE
// 立加秦 甸绢 坷绰 率俊辑 焊晨 傍烹 菩哦
if( !AddHandler_AD( SERVERCOMMON, SERVERCOMMON_HEARTBEAT, Handler_Common::OnSERVERCOMMON_HEARTBEAT ) )
return FALSE;
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_SYN );
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_DBR );
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_CREATE_SYN );
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_CREATE_DBR );
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_DESTROY_SYN );
HANDLER_AD( AD_CHARINFO, AD_CHARINFO_DESTROY_DBR );
return TRUE;
}
BOOL PacketHandler::ResisterHandler_DG()
{
#define HANDLER_DG( c, p ) if( !AddHandler_DG( c, p, Handler_FromGameServer::On##p ) ) return FALSE
// 立加秦 甸绢 坷绰 率俊辑 焊晨 傍烹 菩哦
if( !AddHandler_DG( SERVERCOMMON, SERVERCOMMON_HEARTBEAT, Handler_Common::OnSERVERCOMMON_HEARTBEAT ) )
return FALSE;
HANDLER_DG(DG_WAREHOUSE,DG_WAREHOUSE_START_SYN);
HANDLER_DG(DG_WAREHOUSE,DG_WAREHOUSE_START_DBR);
HANDLER_DG(DG_WAREHOUSE,DG_WAREHOUSE_END_SYN);
HANDLER_DG(DG_ITEM,DG_ITEM_SERIAL_SYN);
HANDLER_DG(DG_CHARINFO,DG_CHARINFO_ALL_REQ_SYN);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -