#include "stdafx.h" #include "PacketControl.h" #include #include // reserve deletion, used by 'PacketControl_Skill.hxx' #ifdef _SERVER #define SUBSTRACT_SIZE (0) #else #define SUBSTRACT_SIZE (sizeof(DWORD)) #endif //================================================================================================== // //================================================================================================== // struct MSG_BASE; ////////////////////////////////////////////////////////////////////////// #include "CategoryLinkPair.h" #include "PacketControl_Compress.h" #include "PacketControl_Types.hxx" namespace nsPacket { //================================================================================================== // BOOLEAN Environment::Init() { static BOOLEAN sbInit = FALSE; if(sbInit) return TRUE; sbInit = TRUE; __zlib_register_malloc(&CompressUtil::memalloc_handler); __zlib_register_free(&CompressUtil::memfree_handler); return TRUE; } //================================================================================================== // PacketInfo PacketControl::MakeStream(const BOOLEAN isPack, MSG_BASE* const pMsg, const WORD wSize) { static BOOLEAN sbInit = Environment::Init(); static BYTE s_pPackStream[PacketControl::SIZEofSTREAM]; static BYTE s_pUnPackStream[PacketControl::SIZEofSTREAM]; BYTE* const pIOStream = isPack ? s_pPackStream : s_pUnPackStream; PacketInfo packetInfo = { pMsg, wSize }; const WORD protocol = MAKEWORD(pMsg->m_byCategory, pMsg->m_byProtocol); switch(protocol) { //case blah~: // break; case MAKEWORD(CG_CRYPTOGRAPHY, CG_CRYPTOGRAPHY_KEY): case MAKEWORD(CG_CRYPTOGRAPHY, CG_CRYPTOGRAPHY_CMD): packetInfo.pMsg = pMsg; packetInfo.Size = wSize; break; default: { packetInfo = CompressUtil::MakeStream(isPack, pIOStream, pMsg, wSize); } break; } return packetInfo; }; //================================================================================================== // // - ´ÜÀÏ ÆÐŶ Pack ¹æ¾È, Á¤ÀÇµÈ ÆÐŶ¿¡ ´ëÇØ¼­ ó¸®µÈ °á°ú network IO buffer size¿Í ´Þ¶óÁú ¼ö ÀÖ´Ù. // - (In Server) GameServer, AgentServerÀÇ ->C °è¿­ ÆÐŶµéÀº À̰ÍÀ» °ÅÄ¡µµ·Ï ÇÑ´Ù. // - (In Client) to GameServer ÆÐŶµé ¸ðµÎ À̰ÍÀ» °ÅÄ¡µµ·Ï ÇÑ´Ù. PacketInfo PacketControl::Pack(MSG_BASE* const pMsg, const WORD wSize) { return MakeStream(TRUE, pMsg, wSize); }; //================================================================================================== // // - ´ÜÀÏ ÆÐŶ Pack ¹æ¾È, Á¤ÀÇµÈ ÆÐŶ¿¡ ´ëÇØ¼­ ó¸®µÈ °á°ú network IO buffer size¿Í ´Þ¶óÁú ¼ö ÀÖ´Ù. // - (In Server) from Client °è¿­ ÆÐŶµéÀº À̰ÍÀ» °ÅÄ¡µµ·Ï ÇÑ´Ù. // - (In Client) from GameServer ÆÐŶµé ¸ðµÎ À̰ÍÀ» °ÅÄ¡µµ·Ï ÇÑ´Ù. PacketInfo PacketControl::UnPack(MSG_BASE* const pMsg, const WORD wSize) { return MakeStream(FALSE, pMsg, wSize); }; /* //================================================================================================== // // - gameserver->client ÀÎ °æ¿ì¿¡¸¸... VOID fn_Callback_Recv(DWORD dwIndex, BYTE * pData, DWORD dwSize) { // decode if(g_pNetwork->m_ProtocolCryptograpyMgr[dwIndex].IsUseRecvCryptography()) { static SPacketBuffer decodeBuffer; CProtocolCryptographyMgr& rCRYPTMGR = g_pNetwork->m_ProtocolCryptograpyMgr[dwIndex]; if(rCRYPTMGR.DecodePacket(decodeBuffer, pData, (INT)dwSize)) { if(CI_GAMESERVERIDX == idx) { PacketInfo packetInfo = PacketControl::UnPack(decodeBuffer.PACKET_PTR, (WORD)dwSize); g_pNetwork->m_fn_Forward_Recv(dwIndex, packetInfo.pMsg); } else { g_pNetwork->m_fn_Forward_Recv(dwIndex, decodeBuffer.PACKET_PTR); } } } else { g_pNetwork->m_fn_Forward_Recv(dwIndex, pData); } } // client->gameserver ÀÎ °æ¿ì¿¡¸¸... BOOL GlobalFunc::SendPacket(eCONNECTION_INDEX idx, void * pBuf, int iLength) { // sample packet // MSG_CG_TEST_PACKET packet; // packet.field0 = xxx; // packet.field1 = xxx; // packet.field2 = xxx; if(CI_GAMESERVERIDX == idx) { PacketInfo packetInfo = PacketControl::Pack(pMsg, wSize); return g_pNetwork->Send(idx, (VOID*)packetInfo.pMsg, (INT)packetInfo.Size); } return g_pNetwork->Send(idx, pBuf, iLength); } // // - (WAVERIX)(080404) ¿©·¯ Á¾·ùÀÇ ÆÐŶÀ» ÇѲ¨¹ø¿¡ ¾ÐÃàÇÒ ¼ö ÀÖ´Â ÇüÅ Áö¿ø // - (¿¹) ATTACK_BRD ÀÌÈÄ HP BRD°¡ ¿¬°áµÇ°ï ÇÑ´Ù. ÀÌ °æ¿ì °¢°¢¿¡ ´ëÇÑ PACKÀÌ ¼öÇàµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó // - ÇϳªÀÇ ÆÐŶ¿¡ ÀÌ µÎ°¡Áö°¡ Å« ºñÀ²·Î ¾ÐÃàµÇ°í, Ç®¸± ¶§, µÎ °¡Áö·Î ºÐ¸®µÇ´Â ÇüŸ¦ µé ¼ö ÀÖ´Ù. // - Àû¾îµµ ±âÁ¸ ÆÐŶ Çڵ鸵 °¢°¢¿¡ ´ëÇØ º¯µ¿ÀÌ ¾ø´Â ¹æÇâÀÌ ÇÊ¿äÇÏ´Ù. // - ÀÌ°Ç Á¤Ã¥¼º ¾Ë°í¸®Áò ¹üÁÖ¿¡ ¼ÓÇÑ´Ù. // // - ÇÏÁö¸¸ À̰ÍÀº À̹ø¿¡ Àû¿ëÇÏÁö ¾Ê´Â´Ù. // - Çö ½ÃÁ¡ ¼³µæµµ Èûµé°í ¶ÇÇÑ Çö ±¸Á¶¿¡¼­ ¸»²ûÇÑ ±¸Á¶°¡ ³ª¿ÀÁö ¾ÊÀ» µí. // - ¹«¾ùº¸´Ù ¼­¹ö¿¡ ±×·± ¸ÅÄ¿´ÏÁòÀÌ Àü¹«ÇÑ ½ÇÁ¤ // VOID OnRecv(const MSG_BASE* pMsg, const WORD wSize) { switch(pMsg->m_byProtocol) { case CG_COMPOSE_STREAM: { // Àç±ÍÀûÀΠ󸮸¦ À§ÇÑ ¹æ¾È } break; } } */ };