#pragma once #include #include "PacketHandler.h" // 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(); //------------------------------------------------------------------------------ // // 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 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 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 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()); } };