Files
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

111 lines
4.7 KiB
C++

#include "stdafx.h"
#include "PacketHandler.h"
/// DBProxy - Game Server
#include <Protocol_ServerCommon.h>
//#include <PacketStruct_MP.h>
//#include <PacketStruct_AP.h>
#include <PacketStruct_GP.h>
#include <PacketStruct_DP.h>
#include <PacketStruct_MP.h>
#include "Handler_GameServer.h"
#include "Handler_MasterServer.h"
#include "Handler_AgentServer.h"
#include "Handler_DBProxy.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_AgentServer::On##p ) ) return FALSE
#define HANDLER_GAME( c, p ) if( !AddHandler( PACKET_HANDLER_GAME, c, p, Handler_GameServer::On##p ) ) return FALSE
#define HANDLER_MASTER( c, p ) if( !AddHandler( PACKET_HANDLER_MASTER, c, p, Handler_MasterServer::On##p ) ) return FALSE
#define HANDLER_DBPROXY( c, p ) if( !AddHandler( PACKET_HANDLER_DBPROXY, c, p, Handler_DBProxy::On##p ) ) return FALSE
//------------------------------------------------------------------------------------------------------------
// GAME
//------------------------------------------------------------------------------------------------------------
//HANDLER_COMMON( PACKET_HANDLER_GAME, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_GAME(GP_RANKING,GP_RANKING_INFO_REQ_SYN);
HANDLER_GAME(GP_RANKING,GP_RANKING_MISSION_CLEAR_SYN);
HANDLER_GAME(GP_RANKING,GP_RANKING_MISSION_REWARD_SYN);
HANDLER_GAME(GP_RANKING,GP_RANKING_SETTLE_CMD);
HANDLER_GAME(GP_RANKING,GP_RANKING_REGISTER_MISSION_POINT_SYN);
HANDLER_GAME(GP_RANKING, GP_MISSION_RANKING_SETTLE_DATE_SYN);
//------------------------------------------------------------------------------------------------------------
// DBPROXY
//------------------------------------------------------------------------------------------------------------
// HANDLER_COMMON( PACKET_HANDLER_PORTAL, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_INFO_REQ_ACK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_INFO_REQ_NAK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_INFO_REQ_END_NTF);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_MISSION_CLEAR_ACK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_MISSION_CLEAR_NAK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_MISSION_REWARD_ACK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_MISSION_REWARD_NAK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_REGISTER_MISSION_POINT_ACK);
HANDLER_DBPROXY(DP_RANKING, DP_RANKING_REGISTER_MISSION_POINT_NAK);
//------------------------------------------------------------------------------------------------------------
// MASTER
//------------------------------------------------------------------------------------------------------------
HANDLER_MASTER( MP_CONNECTION, MP_CONNECTION_SERVER_INFO_CMD );
HANDLER_MASTER( SERVERCOMMON, SERVERCOMMON_SERVERSHUTDOWN_REQ);
//HANDLER_MASTER( MP_CONNECTION, MP_CONNECTION_REQ_SERVER_INFO_DBR );
#ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__
HANDLER_MASTER( MP_CONNECTION, MP_CONNECTION_DISCONNECT_CMD );
HANDLER_MASTER( MP_CONNECTION, MP_CONNECTION_PHASE_SHIFT_CMD );
HANDLER_MASTER( MP_CONNECTION, MP_CONNECTION_BLOCK_CMD );
HANDLER_MASTER( SERVERCOMMON, SERVERCOMMON_DATA_TRANSFER_PLZ_GIVEME_DATA_ACK );
HANDLER_MASTER( SERVERCOMMON, SERVERCOMMON_DATA_TRANSFER_PLZ_GIVEME_DATA_NAK );
HANDLER_MASTER( SERVERCOMMON, SERVERCOMMON_DATA_TRANSFER_SENDDATA_CMD );
#endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__
//------------------------------------------------------------------------------------------------------------
// AGENT
//------------------------------------------------------------------------------------------------------------
//HANDLER_COMMON( PACKET_HANDLER_AGENT, SERVERCOMMON, SERVERCOMMON_HEARTBEAT );
//HANDLER_AGENT( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_SYN );
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 )
{
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]\n", pMsg->m_byCategory, pMsg->m_byProtocol );
return ;
}
pFuncInfo->m_fnHandler( pSession, pMsg, wSize );
}