Files
2022-10-26 12:25:11 +08:00

184 lines
7.4 KiB
C++

#pragma once
#include <PacketStruct_CG.h>
#include "PacketHandler.h"
// <PROTOTYPEs>
class User;
//-------------------------------------------------------------------------------------------------
//#define HANDLER_CG_RECV_IMPL(fnName) \
// void Handler_CG::On##fnName(ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG)
class Handler_CG
{
public: static void RegisterHandler_ALL(PACKET_HANDLER_DELEGATOR pInstance);
private: static sPACKET_HANDLER_INFO* GetHandlerInfo();
static sPACKET_HANDLER_INFO* GetHandlerInfo_CHARINFO();
static sPACKET_HANDLER_INFO* GetHandlerInfo_SYNC();
static sPACKET_HANDLER_INFO* GetHandlerInfo_ZONE();
static sPACKET_HANDLER_INFO* GetHandlerInfo_PARTY();
static sPACKET_HANDLER_INFO* GetHandlerInfo_GM();
static sPACKET_HANDLER_INFO* GetHandlerInfo_SECURE();
//------------------------------------------------------------------------------
// <PACKET HANDLERs>
// Declaration & Implementation
//
public:
#undef ADD_HANDLER_RECV_INFO
#define ADD_HANDLER_RECV_INFO(c, p, accptablePHASE) \
static void On##p(ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG);
// Handler_CG.List.hxx 내용 그대로 복사할 것
ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_CHARINFO_CHAR_ITEM_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_CHARINFO_SKILL_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_CHARINFO_QUICK_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_CHARINFO_STYLE_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_MISSION, CG_MISSION_STREAM_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_QUEST, CG_QUEST_STREAM_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_AREACONQUEST, CG_AREACONQUEST_STREAM_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_PLAYER_ENTER_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_KBMOVE_BRD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_MAP, CG_MAP_TELEPORT_BRD, PHASE_UNLIMITED)
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// MONSTER_RENDER_INFO
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_MONSTER_ENTER_BRD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_MONSTER_DIR_ENTER_BRD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_ALLMONSTERS_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_MAPNPC_ENTER_BRD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SYNC_MONSTER_LEAVE_BRD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CRYPTOGRAPHY, CG_CRYPTOGRAPHY_KEY, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CRYPTOGRAPHY, CG_CRYPTOGRAPHY_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_CONNECTION_ENTERSERVER_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_CONNECTION_ENTERSERVER_NAK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_PREPARE_WORLD_CONNECT_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_PREPARE_WORLD_CONNECT_NAK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_CONNECTION_ENTERVILLAGEREQ_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_MISSION, CG_MISSION_TUTORIAL_WINDOW_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_MISSION, CG_MISSION_TUTORIAL_WINDOW_RET_ACCEPT_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_ZONE, CG_ZONE_PORTAL_FIELD_MOVE_ACK, PHASE_UNLIMITED)
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SECURE_POLICY_PATTERN01_SIMPLEX_SNK_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_SYNC, CG_SECURE_POLICY_PATTERN01_SIMPLEX_SNK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_SKILL, CG_SECURE_POLICY_PATTERN02_SIMPLEX_SNK_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_SKILL, CG_SECURE_POLICY_PATTERN02_SIMPLEX_SNK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_ITEM, CG_SECURE_POLICY_PATTERN03_SIMPLEX_SNK_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_ITEM, CG_SECURE_POLICY_PATTERN03_SIMPLEX_SNK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_TRADE, CG_SECURE_POLICY_PATTERN04_SIMPLEX_SNK_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_TRADE, CG_SECURE_POLICY_PATTERN04_SIMPLEX_SNK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_VENDOR, CG_SECURE_POLICY_PATTERN05_QUERY_MOLA_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_VENDOR, CG_SECURE_POLICY_PATTERN05_QUERY_MOLA_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_WAREHOUSE, CG_SECURE_POLICY_PATTERN06_CONFIGURE_MOLA_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_WAREHOUSE, CG_SECURE_POLICY_PATTERN06_CONFIGURE_MOLA_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_PARTY, CG_SECURE_POLICY_PATTERN07_CONFIGURE_HEARTBEAT_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_PARTY, CG_SECURE_POLICY_PATTERN07_CONFIGURE_HEARTBEAT_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_STATUS, CG_SECURE_POLICY_PATTERN08_DUPLEX_SNK_KEY, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_STATUS, CG_SECURE_POLICY_PATTERN08_DUPLEX_SNK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_STATUS, CG_SECURE_POLICY_PATTERN08_DUPLEX_SNK_CMD, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_SECURE_QUERY_BUILTIN_CHK_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_SECURE_QUERY_BUILTIN_CHK_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_SECURE_QUERY_RESOURCE_CHK_T1_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_CONNECTION, CG_SECURE_QUERY_RESOURCE_CHK_T1_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_SECURE_QUERY_RESOURCE_CHK_T2_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_CHARINFO, CG_SECURE_QUERY_RESOURCE_CHK_T2_ACK, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_MAP, CG_SECURE_QUERY_RESOURCE_CHK_NTF1_SYN, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_BATTLE, CG_SECURE_QUERY_RESOURCE_CHK_T3_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_BATTLE, CG_SECURE_QUERY_RESOURCE_CHK_T3_ACK, PHASE_UNLIMITED)
ADD_HANDLER_RECV_INFO(CG_STYLE, CG_SECURE_QUERY_RESOURCE_CHK_T4_CMD, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_STYLE, CG_SECURE_QUERY_RESOURCE_CHK_T4_ACK, PHASE_UNLIMITED)
//ADD_HANDLER_RECV_INFO(CG_STYLE, CG_SECURE_QUERY_RESOURCE_CHK_NTF2_SYN, PHASE_UNLIMITED)
#undef ADD_HANDLER_RECV_INFO
};
template<class PACKET_TYPE>
class SendLobbyInfoForRequest
{
User * m_pMe;
PACKET_TYPE & m_msg;
public:
SendLobbyInfoForRequest(PACKET_TYPE & msg, User * pMe):m_msg(msg),m_pMe(pMe){ m_msg.m_Count = 0; }
~SendLobbyInfoForRequest(){}
void SendPacket()
{
m_pMe->SendPacket(&m_msg, m_msg.GetSize());
}
void operator()(User * pUser)
{
if(m_pMe && m_pMe->GetUserKey() == pUser->GetUserKey()) return;
if(!pUser->IsMaster() && pUser->IsReady())
{
m_msg.m_dwReadyPlayerKey[m_msg.m_Count] = pUser->GetPlayerKey();
++m_msg.m_Count;
}
}
};
template<class PACKET_TYPE>
class SendPVPLobbyInfoForRequest
{
User * m_pMe;
PACKET_TYPE & m_msg;
public:
SendPVPLobbyInfoForRequest(PACKET_TYPE & msg, User * pMe = NULL):m_msg(msg),m_pMe(pMe){ m_msg.m_Count = 0; }
~SendPVPLobbyInfoForRequest(){}
void SendPacket()
{
m_pMe->SendPacket(&m_msg, m_msg.GetSize());
}
void operator()(User * pUser)
{
if(m_pMe && m_pMe->GetUserKey() == pUser->GetUserKey()) return;
m_msg.m_PlayerInfo[m_msg.m_Count].m_Team = pUser->GetTeam();
m_msg.m_PlayerInfo[m_msg.m_Count].m_Ready = (BYTE)pUser->IsReady();
m_msg.m_PlayerInfo[m_msg.m_Count].m_dwPlayerKey = pUser->GetPlayerKey();
++m_msg.m_Count;
}
};
template<class PACKET_TYPE>
class SendBroadMessage
{
PACKET_TYPE & m_msg;
public:
SendBroadMessage(PACKET_TYPE & msg):m_msg(msg){}
~SendBroadMessage(){}
void operator()(User * pUser)
{
pUser->SendPacket(&m_msg, m_msg.GetSize());
}
};