Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
760 lines
22 KiB
C++
760 lines
22 KiB
C++
#include "stdafx.h"
|
||
#include "RYL_AgentServerTable.h"
|
||
#include "RYL_AgentServerDispatch.h"
|
||
#include "RYL_AdminMgrDispatch.h"
|
||
|
||
#include <Parser/ServerInfo.h>
|
||
#include <Item/ItemFactory.h>
|
||
#include <Log/ServerLog.h>
|
||
|
||
#include <Network/Packet/WrapPacket.h>
|
||
#include <Network/Packet/PacketCommand.h>
|
||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||
#include <Network/Packet/PacketStruct/ServerPacket.h>
|
||
#include <Network/Packet/PacketStruct/GuildPacket.h>
|
||
#include <Network/Winsock/SocketFactory.h>
|
||
#include <Network/Protocol/RYL_AdminMgrProtocol.h>
|
||
#include <Network/Buffer/RYL_CumulateBuffer.h>
|
||
#include <Network/Session/Session.h>
|
||
|
||
#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<PktAgentServer::PktAdminToolGetDataAck*>(lpPktBase);
|
||
|
||
char* lpData = reinterpret_cast<char*>(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<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> ----------------------------------------------------------------------------------
|
||
if (PktAgentServer::PktAdminToolGetData::CHANGE_CHAR_NAME == lpGetDataAck->m_cType)
|
||
{
|
||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktChangeName));
|
||
PktAdminMgr::PktChangeName* lpPktChangeName =
|
||
reinterpret_cast<PktAdminMgr::PktChangeName*>(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, "<EFBFBD><EFBFBD>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
}
|
||
else
|
||
{
|
||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
//----------------------------------------------------------------------------------------------------
|
||
|
||
unsigned short ExtraLength =
|
||
(lpGetDataAck->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck));
|
||
|
||
if (!m_AgentRequestKeeper.GetRequest(dwRequestKey, RequestInfo))
|
||
{
|
||
ERRLOG1(g_Log, "<EFBFBD>˻<EFBFBD> <20><>û <20><><EFBFBD><EFBFBD>: <20><>ûŰ- %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<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ޱ<EFBFBD> <20><><EFBFBD><EFBFBD>: 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<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD>: <20><>ûŰ- %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 : <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD>ڰ<EFBFBD> <20>ش<EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> <20> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ <20>ʿ<EFBFBD>;
|
||
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<PktAdminMgr::PktSyncDeposit*>(lpBuffer);
|
||
|
||
char* DepositBuffer = reinterpret_cast<char*>(lpSyncDeposit + 1);
|
||
|
||
LPSTORE lpStore = reinterpret_cast<LPSTORE>(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;
|
||
}
|
||
|
||
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> AgentServer<65>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> GetData<74><61> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||
bool CRylAgentServerDispatch::SEND_CLIENT_DATA(PktBase* lpPktBase, CServerRequestKeeper::RequestInfo& Info,
|
||
unsigned char cType)
|
||
{
|
||
PktAgentServer::PktAdminToolGetDataAck* lpSGetData =
|
||
static_cast<PktAgentServer::PktAdminToolGetDataAck*>(lpPktBase);
|
||
|
||
CSession* lpSession = &Info.m_lpPacketDispatch->GetSession();
|
||
|
||
unsigned short Src_CpySize = lpSGetData->GetLen() - sizeof(PktAgentServer::PktAdminToolGetDataAck);
|
||
char* Src_DataBuffer = reinterpret_cast<char*>(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, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
return false;
|
||
}
|
||
|
||
PktAdminMgr::PktGetCharacterAck* lpPktGetChar =
|
||
reinterpret_cast<PktAdminMgr::PktGetCharacterAck*>(lpBuffer->begin());
|
||
|
||
char* Des_DataBuffer = reinterpret_cast<char*>(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, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
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, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
}
|
||
|
||
if (false == bIsReleased)
|
||
{
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool CRylAgentServerDispatch::CmdAdminToolSetData(PktBase* lpPktBase)
|
||
{
|
||
PktAgentServer::PktAdminToolSetDataAck* lpSetDataAck =
|
||
static_cast<PktAgentServer::PktAdminToolSetDataAck*>(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)
|
||
{
|
||
// <20>α<EFBFBD><CEB1>ۼ<EFBFBD>
|
||
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<CRylAdminMgrDispatch*>(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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||
lpModifyCharacter = m_ModifyCharMgr.GetCharacter(dwCID); // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
||
|
||
if (NULL != lpModifyCharacter)
|
||
{
|
||
ItemData::CDepositLock::DepositInfo Info;
|
||
|
||
if (m_DepositLock.GetLockInfo(dwUID, Info)) // <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD>.
|
||
{
|
||
if( ( Info.m_lpPacketDispatch == RequestInfo.m_lpPacketDispatch ) && // <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
||
( Info.m_dwCID == dwCID ) )
|
||
{
|
||
if( true == lpModifyCharacter->isClose() ) // <20>۾<EFBFBD><DBBE>Ϸ<EFBFBD><CFB7><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||
{
|
||
// â<><C3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
m_DepositLock.DepositUnLock( dwUID );
|
||
}
|
||
}
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( true == lpModifyCharacter->isClose() )
|
||
{
|
||
m_ModifyCharMgr.EraseChar( lpModifyCharacter->GetCID() );
|
||
}
|
||
else
|
||
{
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
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, "<EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%d)<29><> <20>Ѵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD>: <20><EFBFBD><D7B7>ε<EFBFBD><CEB5><EFBFBD> - %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(); // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>߰輭<DFB0><E8BCAD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>â <20><><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
// <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>
|
||
bool CRylAgentServerDispatch::ServerLogin(unsigned long dwServerGroup)
|
||
{
|
||
bool bIsReleased = true;
|
||
|
||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAgentServer::PktSL));
|
||
|
||
if (NULL == lpBuffer)
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
return false;
|
||
}
|
||
|
||
PktAgentServer::PktSL* lpPktSL = reinterpret_cast<PktAgentServer::PktSL*>(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<unsigned char>(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, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
else
|
||
{
|
||
if (false == GetSession().SendPending(lpBuffer))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
}
|
||
|
||
if (false == bIsReleased)
|
||
{
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
// <20>߰輭<DFB0><E8BCAD> <20>α<EFBFBD><CEB1>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ack
|
||
bool CRylAgentServerDispatch::CmdSysServerLogin(PktBase* lpPktBase)
|
||
{
|
||
SERVER_ID SID;
|
||
PktSLAck* lpPktSLAck = static_cast<PktSLAck*>(lpPktBase);
|
||
|
||
const unsigned char MAX_BUFFER = 255;
|
||
|
||
SID.dwID = m_dwServerID;
|
||
|
||
Item::CItemFactory::GetInstance().SetItemUID(lpPktSLAck->m_dlItemUID);
|
||
|
||
// <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DispatchTable<6C><65> <20>߰<EFBFBD>
|
||
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(); // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool CRylAgentServerDispatch::ItemQtyControlAck(PktBase* lpPktBase)
|
||
{
|
||
bool bIsReleased = true;
|
||
|
||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktItemQtyControl));
|
||
|
||
if (NULL == lpBuffer)
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
return false;
|
||
}
|
||
|
||
PktAdminMgr::PktItemQtyControl* lpPktItemQtyControl =
|
||
reinterpret_cast<PktAdminMgr::PktItemQtyControl*>(lpBuffer->begin());
|
||
|
||
*lpPktItemQtyControl = *reinterpret_cast<PktAdminMgr::PktItemQtyControl*>(lpPktBase);
|
||
|
||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||
sizeof(PktAdminMgr::PktItemQtyControl), PktAdminMgr::PktCMD::PktItemQtyControl, 0, 0))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
else
|
||
{
|
||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
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<PktGuildPosition*>(lpPktBase);
|
||
|
||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktGuildMemberEdit));
|
||
|
||
if (NULL == lpBuffer)
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
return false;
|
||
}
|
||
|
||
PktAdminMgr::PktGuildMemberEdit* lpPktGuildMemberEdit =
|
||
reinterpret_cast<PktAdminMgr::PktGuildMemberEdit*>(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, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
else
|
||
{
|
||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
}
|
||
|
||
if (false == bIsReleased)
|
||
{
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
// <20>߰輭<DFB0><E8BCAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ<CFBE><EEB3AF> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool CRylAgentServerDispatch::ConnectedAgentListAck()
|
||
{
|
||
bool bIsReleased = true;
|
||
|
||
CBuffer* lpBuffer = CREATE_BUFFER(GetBufferFactory(), sizeof(PktAdminMgr::PktConnectAllServerz));
|
||
|
||
if (NULL == lpBuffer)
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
|
||
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)) // <20>߰輭<DFB0><E8BCAD> <20><><EFBFBD><EFBFBD> üũ
|
||
{
|
||
// <20>迭 <20>պκк<CEBA><D0BA><EFBFBD> <20><><EFBFBD>ʴ<EFBFBD><CAB4><EFBFBD> '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> + 1' <20><> <20><><EFBFBD><EFBFBD>
|
||
lpConnectAllServerz->m_nConnectedServerIndex[nArrayIndex] = nIndex + 1;
|
||
++nArrayIndex;
|
||
}
|
||
}
|
||
|
||
*reinterpret_cast<PktAdminMgr::PktConnectAllServerz*>(lpBuffer->wr_ptr()) = *lpConnectAllServerz;
|
||
|
||
if (false == PacketWrap::WrapHeader(lpBuffer,
|
||
sizeof(PktAdminMgr::PktConnectAllServerz), PktAdminMgr::PktCMD::PktRefreshConnectedList, 0, 0))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
else
|
||
{
|
||
if (NULL != lpConnectAllServerz)
|
||
{
|
||
delete lpConnectAllServerz;
|
||
lpConnectAllServerz = NULL;
|
||
}
|
||
|
||
if (false == CClientDispatchTable::GetInstance().SendAll(lpBuffer))
|
||
{
|
||
ERRLOG0(g_Log, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.");
|
||
bIsReleased = false;
|
||
}
|
||
}
|
||
|
||
if (false == bIsReleased)
|
||
{
|
||
SAFE_RELEASE_BUFFER(lpBuffer);
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
} |