#include "stdafx.h" #include "RYL_AgentServerTable.h" #include "RYL_AgentServerDispatch.h" #include "RYL_AdminMgrDispatch.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "ClientDispatchTable.h" CMultiDispatch& CRylAgentServerDispatch::GetDispatchTable() { static CMultiDispatch multiDispatch; return multiDispatch; } void CRylAgentServerDispatch::SetDispatchInfo(long dwServerGroup, char* ServerName) { m_dwServerGroup = dwServerGroup; strncpy(m_szServerName, ServerName, 256); } void CRylAgentServerDispatch::Destroy() { delete this; } bool CRylAgentServerDispatch::DispatchPacket(PktBase* lpPktBase) { unsigned char cCmd = lpPktBase->GetCmd(); switch(cCmd) { case PktAgentServer::PktCMD::CmdSysServerLogin: return CmdSysServerLogin(lpPktBase); case PktAgentServer::PktCMD::CmdAdminToolGetData: return CmdAdminToolGetData(lpPktBase); case PktAgentServer::PktCMD::CmdAdminToolSetData: return CmdAdminToolSetData(lpPktBase); case CmdItemQtyCheck: return ItemQtyControlAck(lpPktBase); case CmdGuildPosition: return GuildPositionAck(lpPktBase); } return true; } bool CRylAgentServerDispatch::CmdAdminToolGetData(PktBase* lpPktBase) { PktAgentServer::PktAdminToolGetDataAck* lpGetDataAck = static_cast(lpPktBase); char* lpData = reinterpret_cast(lpGetDataAck + 1); CServerRequestKeeper::RequestInfo RequestInfo; unsigned long dwUID = lpGetDataAck->m_dwUID; unsigned long dwCID = lpGetDataAck->m_dwCID; unsigned long dwRequestKey = lpGetDataAck->m_dwRequestKey; unsigned short cError = lpGetDataAck->GetError(); bool bResult = false; // ij¸¯ÅÍ À̸§ º¯°æ ---------------------------------------------------------------------------------- if (PktAgentServer::PktAdminToolGetData::CHANGE_CHAR_NAME == lpGetDataAck->m_cType) { CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktChangeName)); PktAdminMgr::PktChangeName* lpPktChangeName = reinterpret_cast(lpBuffer->begin()); lpPktChangeName->m_dwCID = dwCID; lpPktChangeName->m_dwServerGroup = m_dwServerGroup; lpPktChangeName->m_dwRequest = dwRequestKey; lpPktChangeName->m_dwUID = (unsigned long)cError; if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAdminMgr::PktChangeName), PktAdminMgr::PktCMD::PktChangeNameAck, 0, 0)) { ERRLOG0(g_Log, "ÆÐŶ ·¦ÇÎ ½ÇÆÐ"); SAFE_RELEASE_BUFFER(lpBuffer); } else { if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer)) { ERRLOG0(g_Log, "¿î¿µ Ŭ¶óÀÌ¾ðÆ®·Î Á¤º¸ Àü¼Û ½ÇÆÐ"); SAFE_RELEASE_BUFFER(lpBuffer); } } return true; } //---------------------------------------------------------------------------------------------------- unsigned short ExtraLength = (lpGetDataAck->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck)); if (!m_AgentRequestKeeper.GetRequest(dwRequestKey, RequestInfo)) { ERRLOG1(g_Log, "°Ë»ö ¿äû ½ÇÆÐ: ¿äûŰ- %d", dwRequestKey); return true; } CModifyCharacter* lpModifyChar = m_ModifyCharMgr.GetCharacter(dwCID); if ((cError != 0) || (NULL == lpModifyChar)) { m_ModifyCharMgr.EraseChar(dwCID); m_AgentRequestKeeper.Pop(dwRequestKey); ERRLOG1(g_Log, "ij¸¯ÅÍ Á¤º¸ ¹Þ±â ½ÇÆÐ: err- %d", cError); return true; } switch(lpGetDataAck->m_cType) { case PktAgentServer::PktAdminToolGetData::CHAR_BASIC_DATA: bResult = m_ParseData.PARSE_CHAR_BASIC_DATA(lpModifyChar, lpData); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_BASIC_DATA); } break; case PktAgentServer::PktAdminToolGetData::CHAR_EXTRA_DATA: bResult = m_ParseData.PARSE_CHAR_EXTRA_DATA(lpModifyChar, lpData); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_EXTRA_DATA); } break; case PktAgentServer::PktAdminToolGetData::CHAR_FRIEND_DATA: bResult = m_ParseData.PARSE_CHAR_FRIEND_DATA(lpModifyChar, lpData, ExtraLength); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_FRIEND_DATA); } break; case PktAgentServer::PktAdminToolGetData::CHAR_BAN_DATA: bResult = m_ParseData.PARSE_CHAR_BAN_DATA(lpModifyChar, lpData, ExtraLength); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::CHAR_BAN_DATA); } break; case PktAgentServer::PktAdminToolGetData::STORE_12_DATA: bResult = m_ParseData.PARSE_STORE_12_DATA(lpModifyChar, lpData); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::STORE_12_DATA); } break; case PktAgentServer::PktAdminToolGetData::STORE_34_DATA: bResult = m_ParseData.PARSE_STORE_34_DATA(lpModifyChar, lpData); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::STORE_34_DATA); } break; case PktAgentServer::PktAdminToolGetData::FINISH_GET_DATA: lpModifyChar->SetUID(dwUID); lpModifyChar->SetCID(dwCID); lpModifyChar->SetOldServerGroup(lpGetDataAck->m_cOldServerGroupID); bResult = PARSE_FINISH_GET_DATA(dwRequestKey); if(bResult) { SEND_CLIENT_DATA(lpPktBase, RequestInfo, PktAdminMgr::PktGetCharacterAck::FINISH_GET_DATA); SyncDeposit(dwUID, dwCID, RequestInfo); } break; } if (!bResult) { m_AgentRequestKeeper.Pop(dwRequestKey); m_ModifyCharMgr.EraseChar(dwCID); ERRLOG4(g_Log, "ij¸¯ÅÍ µ¥ÀÌÅÍ ÃʱâÈ­ ½ÇÆÐ: ¿äûŰ- %d, UID- %d, CID- %d, cType- %c", dwRequestKey, dwUID, dwCID, lpGetDataAck->m_cType ); return true; } return true; } bool CRylAgentServerDispatch::UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial, unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey) { return m_ParseData.UpdateCharacter(lpChar, dwSerial, dwUID, dwCID, dwRequestKey); } bool CRylAgentServerDispatch::PARSE_FINISH_GET_DATA(unsigned long dwRequestKey) { m_AgentRequestKeeper.Pop(dwRequestKey); return true; } // TODO : ÇöÀç ´Ù¸¥ ¿î¿µÀÚ°¡ ÇØ´ç â°í¸¦ ÆíÁýÁßÀÌ¸é ´Ù¸¥ ¿î¿µÀÚÀÇ ¿î¿µ Ŭ¶óÀÌ¾ðÆ®¿¡µµ µ¿±âÈ­ ÇÊ¿ä; bool CRylAgentServerDispatch::SyncDeposit(unsigned long dwUID, unsigned long dwCID, CServerRequestKeeper::RequestInfo& Info) { ItemData::CDepositLock::DepositInfo LockInfo; unsigned short DepositBufferSize = sizeof(PktAdminMgr::PktSyncDeposit) + sizeof(STORE); if (m_DepositLock.GetLockInfo(dwUID, LockInfo)) { CModifyCharacter* lpCharacter = m_ModifyCharMgr.GetCharacter(LockInfo.m_dwCID); if ((NULL != lpCharacter) && (LockInfo.m_dwCID != dwCID)) { CModifyCharacter* lpSyncChar = m_ModifyCharMgr.GetCharacter(dwCID); if (NULL != lpSyncChar) { Item::CDepositContainer& SyncContainer = lpSyncChar->GetDeposit(); SyncContainer.GetTab(0)->ClearItems(); SyncContainer.GetTab(1)->ClearItems(); SyncContainer.GetTab(2)->ClearItems(); SyncContainer.GetTab(3)->ClearItems(); for (int cnt = 0;cnt < 2; ++cnt) { CCumulateBuffer cBuffer(DepositBufferSize, &Info.m_lpPacketDispatch->GetSession()); unsigned short usBufferSize = DepositBufferSize; char* lpBuffer = cBuffer.GetBuffer(sizeof(PktAdminMgr::PktSyncDeposit)); PktAdminMgr::PktSyncDeposit* lpSyncDeposit = reinterpret_cast(lpBuffer); char* DepositBuffer = reinterpret_cast(lpSyncDeposit + 1); LPSTORE lpStore = reinterpret_cast(DepositBuffer); Item::CDepositContainer& DepositContainer = lpCharacter->GetDeposit(); const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab((cnt * 2)); const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab((cnt * 2) + 1); lpSyncDeposit->m_dwUID = dwUID; lpSyncDeposit->m_dwRequestID = Info.m_dwClientRequest; if (cnt == 0) { lpSyncDeposit->m_cType = PktAdminMgr::PktSyncDeposit::Tab12; } else if(cnt == 1) { lpSyncDeposit->m_cType = PktAdminMgr::PktSyncDeposit::Tab34; } if ((NULL != lpContainer0) && (NULL != lpContainer1)) { lpStore->dwSize = STORE::MAX_STORE_SIZE; if (lpContainer0->SerializeOut(lpStore->Data, lpStore->dwSize)) { unsigned long dwContainer0Size = lpStore->dwSize; lpStore->dwSize = STORE::MAX_STORE_SIZE - dwContainer0Size; if (lpContainer1->SerializeOut(lpStore->Data + dwContainer0Size, lpStore->dwSize)) { lpStore->dwSize += dwContainer0Size; cBuffer.ResizeLength(usBufferSize); m_ParseData.PARSE_STORE_12_DATA(lpSyncChar, DepositBuffer); PacketWrap::WrapHeader(lpBuffer, usBufferSize, PktAdminMgr::PktCMD::PktDepositSync, 0 , 0); } } } else { cBuffer.ResizeLength(0); } } } } } return true; } // Ŭ¶óÀÌ¾ðÆ®¿¡°Ô AgentServer·ÎºÎÅÍ ¹ÞÀº GetData¸¦ º¸³½´Ù. bool CRylAgentServerDispatch::SEND_CLIENT_DATA(PktBase* lpPktBase, CServerRequestKeeper::RequestInfo& Info, unsigned char cType) { PktAgentServer::PktAdminToolGetDataAck* lpSGetData = static_cast(lpPktBase); CSession* lpSession = &Info.m_lpPacketDispatch->GetSession(); unsigned short Src_CpySize = lpSGetData->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck); char* Src_DataBuffer = reinterpret_cast(lpSGetData + 1); unsigned short PktLength = Src_CpySize + sizeof(PktAdminMgr::PktGetCharacterAck); bool bIsReleased = true; CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), PktLength); if (NULL == lpBuffer) { ERRLOG0(g_Log, "¹öÆÛ »ý¼º ½ÇÆÐ"); return false; } PktAdminMgr::PktGetCharacterAck* lpPktGetChar = reinterpret_cast(lpBuffer->begin()); char* Des_DataBuffer = reinterpret_cast(lpPktGetChar + 1); lpPktGetChar->m_dwCID = lpSGetData->m_dwCID; lpPktGetChar->m_dwUID = lpSGetData->m_dwUID; lpPktGetChar->m_dwServerGroup = m_dwServerGroup; lpPktGetChar->m_cOldServerGroupID = lpSGetData->m_cOldServerGroupID; lpPktGetChar->m_dwRequestKey = Info.m_dwClientRequest; lpPktGetChar->m_cType = cType; CopyMemory(Des_DataBuffer, Src_DataBuffer, Src_CpySize); if (false == PacketWrap::WrapHeader(lpBuffer, PktLength, PktAdminMgr::PktCMD::PktGetCharacterAck, 0, 0)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } else { if (false == lpSession->SendPending(lpBuffer)) { ERRLOG3(g_Log, "Packet sending to client failed : UID- %d, CID- %d, cType- %d", lpSGetData->m_dwUID, lpSGetData->m_dwCID, cType); ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } } if (false == bIsReleased) { SAFE_RELEASE_BUFFER(lpBuffer); return false; } return true; } bool CRylAgentServerDispatch::CmdAdminToolSetData(PktBase* lpPktBase) { PktAgentServer::PktAdminToolSetDataAck* lpSetDataAck = static_cast(lpPktBase); CServerRequestKeeper::RequestInfo RequestInfo; CModifyCharacter* lpModifyCharacter = NULL; unsigned long dwUID = lpSetDataAck->m_dwUID; unsigned long dwCID = lpSetDataAck->m_dwCID; unsigned long dwRequestKey = lpSetDataAck->m_dwRequestKey; unsigned long cError = lpSetDataAck->GetError(); bool bResult = false; CModifyCharacter* lpModifyChar = m_ModifyCharMgr.GetCharacter(dwCID); if (NULL == lpModifyChar) { // ·Î±×ÀÛ¼º m_AgentRequestKeeper.Pop(dwRequestKey); return true; } if (true != m_AgentRequestKeeper.GetRequest(dwRequestKey, RequestInfo)) { ERRLOG1(g_Log, "Requestkey searching failed : requestkey- %d", dwRequestKey); m_ModifyCharMgr.EraseChar(dwCID); return true; } if (0 != cError) { CRylAdminMgrDispatch* lpClientDispatch = static_cast(RequestInfo.m_lpPacketDispatch); if (NULL != lpClientDispatch) { switch(cError) { case PktAgentServer::PktAdminToolSetData::UNKNOWN_ERROR: lpClientDispatch->SendResult(PktAdminMgr::PktResult::UNKNOWN_ERROR); break; case PktAgentServer::PktAdminToolSetData::INVALID_UID_CID_ERROR: lpClientDispatch->SendResult(PktAdminMgr::PktResult::INVALID_UID_CID_ERROR); break; case PktAgentServer::PktAdminToolSetData::LOGIN_ANOTHER_GAMESERVER: lpClientDispatch->SendResult(PktAdminMgr::PktResult::LOGIN_ANOTHER_GAMESERVER); break; case PktAgentServer::PktAdminToolSetData::SESSION_OPEN_FAILED: lpClientDispatch->SendResult(PktAdminMgr::PktResult::SESSION_OPEN_FAILED); break; case PktAgentServer::PktAdminToolSetData::ALREADY_LOGIN_USER_SESSION_OPEN: lpClientDispatch->SendResult(PktAdminMgr::PktResult::ALREADY_LOGIN_USER_SESSION_OPEN); break; case PktAgentServer::PktAdminToolSetData::ANOTHER_CHAR_LOAD_FAILED: lpClientDispatch->SendResult(PktAdminMgr::PktResult::ANOTHER_CHAR_LOAD_FAILED); break; case PktAgentServer::PktAdminToolSetData::SETTING_DATA_FAILED: lpClientDispatch->SendResult(PktAdminMgr::PktResult::SETTING_DATA_FAILED); break; case PktAgentServer::PktAdminToolSetData::SESSION_START_FAILED: lpClientDispatch->SendResult(PktAdminMgr::PktResult::SESSION_START_FAILED); break; } } else { ERRLOG0(g_Log, "Client dispatch searching failed"); } ERRLOG1(g_Log, "Data sending failed : CMD- %d", cError); m_ModifyCharMgr.EraseChar(dwCID); return true; } switch(lpSetDataAck->m_cType) { case PktAgentServer::PktAdminToolSetData::FINISH_UPDATE_DATA: m_AgentRequestKeeper.Pop(dwRequestKey); // ¸®Äù½ºÆ® »èÁ¦ lpModifyCharacter = m_ModifyCharMgr.GetCharacter(dwCID); // ij¸¯ÅÍ Á¤º¸¸¦ °¡Á®¿Â´Ù. if (NULL != lpModifyCharacter) { ItemData::CDepositLock::DepositInfo Info; if (m_DepositLock.GetLockInfo(dwUID, Info)) // ÇöÀç ´Ù¸¥ »ç¿ëÀÚ°¡ â°í¸¦ µ¶Á¡Çϰí ÀÖ´Ù. { if( ( Info.m_lpPacketDispatch == RequestInfo.m_lpPacketDispatch ) && // µ¶Á¡Çϰí ÀÖ´Â »ç¶÷ÀÌ ³ª¶ó¸é.. ( Info.m_dwCID == dwCID ) ) { if( true == lpModifyCharacter->isClose() ) // ÀÛ¾÷¿Ï·áÈÄ Ä³¸¯Å͸¦ ´ÝÀ»±î? { // â°íµ¥ÀÌÅÍ µ¶Á¡ ±ÇÇÑ ÇØÁ¦ m_DepositLock.DepositUnLock( dwUID ); } } } // ÀúÀåÈÄ »èÁ¦ ´ë±â¶ó¸é... ÆíÁý¸®½ºÆ®¿¡¼­ »èÁ¦½ÃÄÑÁÖÀÚ if( true == lpModifyCharacter->isClose() ) { m_ModifyCharMgr.EraseChar( lpModifyCharacter->GetCID() ); } else { // ÀúÀå Á¾·á lpModifyCharacter->SetSaveState(false); } } break; } return true; } void CRylAgentServerDispatch::SetPaseSession() { m_ParseData.SetSession(&GetSession()); } bool CRylAgentServerDispatch::Send(CBuffer* lpBuffer) { return GetSession().SendPending(lpBuffer); } void CRylAgentServerDispatch::Connected() { unsigned long dwServerGroup = CAgentServerTable::GetInstance().GetGroupFromDBAgentIP( GetSession().GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr); if (CAgentServerTable::MAX_AGENT_SERVER <= dwServerGroup) { ERRLOG2(g_Log, "ÃÖ´ë ¼­¹ö±×·ì(%d)À» ³Ñ´Â ¼­¹ö±×·ìÀ¸·Î Á¢¼Ó ½Ãµµ: ±×·ìÀ妽º - %d", CAgentServerTable::MAX_AGENT_SERVER, dwServerGroup); } else { ServerLogin(dwServerGroup); } } void CRylAgentServerDispatch::Disconnected() { GetDispatchTable().RemoveDispatch(m_dwServerGroup); CAgentServerTable::GetInstance().Disconnected( GetSession().GetRemoteAddr().get_addr_in().sin_addr.S_un.S_addr); ConnectedAgentListAck(); // Ŭ¶óÀ̾ðÆ®ÀÇ Áß°è¼­¹ö ¿¬°á »óÅÂâ °»½Å } // Áß°è¼­¹ö¿¡ ·Î±×ÀÎ bool CRylAgentServerDispatch::ServerLogin(unsigned long dwServerGroup) { bool bIsReleased = true; CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAgentServer::PktSL)); if (NULL == lpBuffer) { ERRLOG0(g_Log, "¹öÆÛ »ý¼º ½ÇÆÐ"); return false; } PktAgentServer::PktSL* lpPktSL = reinterpret_cast(lpBuffer->begin()); const int MAX_ADDRESS = 128; char szAddress[MAX_ADDRESS]; CTCPFactory TcpFactory; TcpFactory.GetNetworkInfo(szAddress, MAX_ADDRESS); lpPktSL->m_Address.S_un.S_addr = inet_addr(szAddress); char cChannel = 0; CServerInfo& InfoScript = CServerInfo::GetInstance(); if(InfoScript.Reload()) { const int MAX_BUFFER = 256; const char* szCHBuffer = InfoScript.GetValue("SERVER_CH"); char szCH[MAX_BUFFER]; if(NULL != szCHBuffer) { strncpy(szCH, szCHBuffer, MAX_BUFFER); szCH[MAX_BUFFER - 1] = 0; cChannel = (char)atoi(szCH); } } SERVER_ID serverID; serverID.sID.Channel = cChannel; serverID.sID.Group = static_cast(dwServerGroup); serverID.sID.ID = SERVER_ID::ADMIN_TOOL_ZONE; serverID.sID.Type = CServerSetup::AdminToolServer; m_dwServerID = lpPktSL->m_dwServerID = serverID.dwID; if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAgentServer::PktSL), PktAgentServer::PktCMD::CmdSysServerLogin, 0, 0)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } else { if (false == GetSession().SendPending(lpBuffer)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } } if (false == bIsReleased) { SAFE_RELEASE_BUFFER(lpBuffer); return false; } return true; } // Áß°è¼­¹ö ·Î±×Àο¡ ¼º°øÇßÀ» °æ¿ì Ack bool CRylAgentServerDispatch::CmdSysServerLogin(PktBase* lpPktBase) { SERVER_ID SID; PktSLAck* lpPktSLAck = static_cast(lpPktBase); const unsigned char MAX_BUFFER = 255; SID.dwID = m_dwServerID; Item::CItemFactory::GetInstance().SetItemUID(lpPktSLAck->m_dlItemUID); // ·Î±×ÀÎ ¼º°ø½Ã DispatchTable¿¡ Ãß°¡ GetDispatchTable().SetDispatch(SID.GetGroup(), this); CServerInfo& InfoScript = CServerInfo::GetInstance(); char szTmp[MAX_BUFFER]; _snprintf(szTmp, MAX_BUFFER, "SERVERGROUP_NAME_%02d", SID.GetGroup()); const char* szGroupName = InfoScript.GetValue(szTmp); if(NULL != szGroupName) { char szServerNameBuffer[MAX_BUFFER]; strncpy(szServerNameBuffer, szGroupName, MAX_BUFFER); szServerNameBuffer[MAX_BUFFER - 1] = 0; SetDispatchInfo(SID.GetGroup(), szServerNameBuffer); ConnectedAgentListAck(); // Ŭ¶óÀÌ¾ðÆ® °»½Å } return true; } bool CRylAgentServerDispatch::ItemQtyControlAck(PktBase* lpPktBase) { bool bIsReleased = true; CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktItemQtyControl)); if (NULL == lpBuffer) { ERRLOG0(g_Log, "¹öÆÛ »ý¼º ½ÇÆÐ"); return false; } PktAdminMgr::PktItemQtyControl* lpPktItemQtyControl = reinterpret_cast(lpBuffer->begin()); *lpPktItemQtyControl = *reinterpret_cast(lpPktBase); if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAdminMgr::PktItemQtyControl), PktAdminMgr::PktCMD::PktItemQtyControl, 0, 0)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } else { if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } } if (false == bIsReleased) { SAFE_RELEASE_BUFFER(lpBuffer); return false; } return true; } bool CRylAgentServerDispatch::GuildPositionAck(PktBase* lpPktBase) { bool bIsReleased = true; PktGuildPosition* lpPktGuildPosition = reinterpret_cast(lpPktBase); CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktGuildMemberEdit)); if (NULL == lpBuffer) { ERRLOG0(g_Log, "¹öÆÛ »ý¼º ½ÇÆÐ"); return false; } PktAdminMgr::PktGuildMemberEdit* lpPktGuildMemberEdit = reinterpret_cast(lpBuffer->begin()); lpPktGuildMemberEdit->m_dwGID = lpPktGuildPosition->m_dwGID; lpPktGuildMemberEdit->m_dwCID = lpPktGuildPosition->m_dwCID; lpPktGuildMemberEdit->m_cPosition = lpPktGuildPosition->m_cPosition; lpPktGuildMemberEdit->m_cType = lpPktGuildPosition->m_cType; if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAdminMgr::PktGuildMemberEdit), PktAdminMgr::PktCMD::PktGuildMemberEdit, 0, 0)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } else { if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } } if (false == bIsReleased) { SAFE_RELEASE_BUFFER(lpBuffer); return false; } return true; } // Áß°è¼­¹ö¿Í Á¢¼Ó, ²÷±èÀÌ ÀϾ¶§ Ŭ¶óÀÌ¾ðÆ®·Î Á¤º¸ º¸³»±â bool CRylAgentServerDispatch::ConnectedAgentListAck() { bool bIsReleased = true; CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktConnectAllServerz)); if (NULL == lpBuffer) { ERRLOG0(g_Log, "¹öÆÛ »ý¼º ½ÇÆÐ"); return false; } PktAdminMgr::PktConnectAllServerz* lpConnectAllServerz = new PktAdminMgr::PktConnectAllServerz; ZeroMemory(lpConnectAllServerz->m_nConnectedServerIndex, sizeof(lpConnectAllServerz->m_nConnectedServerIndex)); int nArrayIndex = 0; for(unsigned int nIndex = 0; nIndex < CAgentServerTable::MAX_AGENT_SERVER; ++nIndex) { if(NULL != CAgentServerTable::GetInstance().GetDispatch(nIndex)) // Áß°è¼­¹ö ¿¬°á üũ { // ¹è¿­ ¾ÕºÎºÐºÎÅÍ Â÷·Ê´ë·Î '¿¬°áµÈ ¼­¹ö À妽º + 1' À» ´ëÀÔ lpConnectAllServerz->m_nConnectedServerIndex[nArrayIndex] = nIndex + 1; ++nArrayIndex; } } *reinterpret_cast(lpBuffer->wr_ptr()) = *lpConnectAllServerz; if (false == PacketWrap::WrapHeader(lpBuffer, sizeof(PktAdminMgr::PktConnectAllServerz), PktAdminMgr::PktCMD::PktRefreshConnectedList, 0, 0)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } else { if (NULL != lpConnectAllServerz) { delete lpConnectAllServerz; lpConnectAllServerz = NULL; } if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer)) { ERRLOG0(g_Log, "¼öµ¿À¸·Î ÆÐŶÀ» ¸±¸®½ºÇÕ´Ï´Ù."); bIsReleased = false; } } if (false == bIsReleased) { SAFE_RELEASE_BUFFER(lpBuffer); return false; } return true; }