⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packethandler.cpp

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -