Restructure repository to include all source folders
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>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#ifndef _RYLAGENTSERVERPARSEDATA_H_
|
||||
#define _RYLAGENTSERVERPARSEDATA_H_
|
||||
|
||||
class CSession;
|
||||
class CModifyCharacter;
|
||||
|
||||
/*!
|
||||
\class CAgentServerParseData
|
||||
중계서버에서 받은 캐릭터 정보 파싱
|
||||
*/
|
||||
class CAgentServerParseData
|
||||
{
|
||||
public:
|
||||
struct SendInfo
|
||||
{
|
||||
unsigned __int64 m_dwSerial;
|
||||
unsigned long m_dwUID;
|
||||
unsigned long m_dwCID;
|
||||
unsigned long m_dwRequestKey;
|
||||
};
|
||||
|
||||
void SetSession(CSession* lpSession) { m_lpSession = lpSession; }
|
||||
|
||||
public:
|
||||
bool PARSE_CHAR_BASIC_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer);
|
||||
bool PARSE_CHAR_EXTRA_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer);
|
||||
bool PARSE_CHAR_FRIEND_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer, unsigned short PaseLength);
|
||||
bool PARSE_CHAR_BAN_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer, unsigned short PaseLength);
|
||||
bool PARSE_STORE_12_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer);
|
||||
bool PARSE_STORE_34_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer);
|
||||
|
||||
bool UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial,
|
||||
unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey);
|
||||
|
||||
bool SEND_CHAR_BASIC_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_CHAR_EXTRA_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_CHAR_FRIEND_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_CHAR_BAN_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_STORE_12_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_STORE_34_DATA(CModifyCharacter* lpChar, SendInfo& SetData);
|
||||
bool SEND_FINISH_UPDATE_DATA(SendInfo& SetData, unsigned char cOldServerGroupID);
|
||||
|
||||
private:
|
||||
CSession* m_lpSession;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,118 @@
|
||||
#include "stdafx.h"
|
||||
#include "Ryl_AgentServerParseData.h"
|
||||
|
||||
#include <Network/Buffer/Ryl_CumulateBuffer.h>
|
||||
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
|
||||
#include <Network/Session/Session.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharLoginOutPacketStruct.h>
|
||||
#include <Character/ModifyCharacter.h>
|
||||
#include <Stream/Buffer/Buffer.h>
|
||||
#include <Stream/Buffer/BufferFactory.h>
|
||||
#include <Item/ItemFactory.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
|
||||
bool CAgentServerParseData::PARSE_CHAR_BASIC_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer)
|
||||
{
|
||||
unsigned short* lpSizeArray = reinterpret_cast<unsigned short*>(lpDataBuffer);
|
||||
char* lpCharDataBuffer = lpDataBuffer + (sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB);
|
||||
|
||||
if(!lpCharacter->SetCharacterInfo(lpCharDataBuffer, lpSizeArray))
|
||||
{
|
||||
ERRLOG0(g_Log, "PARSE_CHAR_BASIC_DATA 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::PARSE_CHAR_EXTRA_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer)
|
||||
{
|
||||
CModifyCharacter::CHAR_EXTRA_DATA& ExtraData = lpCharacter->GetExtraData();
|
||||
|
||||
ExtraData.m_CharInfoEX = *reinterpret_cast<CHAR_INFOEX*>(lpDataBuffer);
|
||||
lpDataBuffer += sizeof(CHAR_INFOEX);
|
||||
ExtraData.m_Quest = *reinterpret_cast<QUEST*>(lpDataBuffer);
|
||||
lpDataBuffer += sizeof(QUEST);
|
||||
ExtraData.m_History = *reinterpret_cast<HISTORY*>(lpDataBuffer);
|
||||
lpDataBuffer += sizeof(HISTORY);
|
||||
ExtraData.m_Config = *reinterpret_cast<CONFIG*>(lpDataBuffer);
|
||||
lpDataBuffer += sizeof(CONFIG);
|
||||
|
||||
// STORE_INFO
|
||||
LPSTORE_INFO lpStoreInfo = reinterpret_cast<LPSTORE_INFO>(lpDataBuffer);
|
||||
Item::CDepositContainer& DepositContainer = lpCharacter->GetDeposit();
|
||||
|
||||
DepositContainer.SetPassword(lpStoreInfo->Password, STORE_INFO::MAX_PASS_LEN);
|
||||
DepositContainer.SetTabFlag(lpStoreInfo->Flag);
|
||||
DepositContainer.DeductGold(lpCharacter->GetDeposit().GetGold());
|
||||
DepositContainer.AddGold(lpStoreInfo->Gold);
|
||||
|
||||
lpCharacter->RevisionQuestNation();
|
||||
lpCharacter->ParseQuestData();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::PARSE_CHAR_FRIEND_DATA(CModifyCharacter* lpCharacter,
|
||||
char* lpDataBuffer, unsigned short PaseLength)
|
||||
{
|
||||
CFriendList& FriendList = lpCharacter->GetFriendList();
|
||||
|
||||
if(!FriendList.SerializeIn(lpDataBuffer, PaseLength))
|
||||
{
|
||||
ERRLOG0(g_Log, "PARSE_CHAR_FRIEND_DATA 실패 (친구 리스트 시리얼라이즈 인 실패)");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::PARSE_CHAR_BAN_DATA(CModifyCharacter* lpCharacter,
|
||||
char* lpDataBuffer, unsigned short PaseLength)
|
||||
{
|
||||
CBanList& BanList = lpCharacter->GetBanList();
|
||||
|
||||
if(!BanList.SerializeIn(lpDataBuffer, PaseLength))
|
||||
{
|
||||
ERRLOG0(g_Log, "PARSE_CHAR_BAN_DATA 실패 (거부 리스트 시리얼라이즈 인 실패)");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::PARSE_STORE_12_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer)
|
||||
{
|
||||
LPSTORE lpStore12 = reinterpret_cast<LPSTORE>(lpDataBuffer);
|
||||
|
||||
Item::CDepositContainer& DepositContainer = lpCharacter->GetDeposit();
|
||||
|
||||
if(!DepositContainer.SerializeIn(lpStore12->Data, lpStore12->dwSize))
|
||||
{
|
||||
ERRLOG0(g_Log, "PARSE_STORE_12_DATA 실패 (창고12 시리얼라이즈 인 실패)");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
lpCharacter->SetOperationFlag(CCharacter::CHAR_INFO_LOADED);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::PARSE_STORE_34_DATA(CModifyCharacter* lpCharacter, char* lpDataBuffer)
|
||||
{
|
||||
LPSTORE lpStore34 = reinterpret_cast<LPSTORE>(lpDataBuffer);
|
||||
|
||||
Item::CDepositContainer& DepositContainer = lpCharacter->GetDeposit();
|
||||
|
||||
if(!DepositContainer.SerializeIn(lpStore34->Data, lpStore34->dwSize))
|
||||
{
|
||||
ERRLOG0(g_Log, "PARSE_STORE_34_DATA 실패 (창고34 시리얼라이즈 인 실패)");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,349 @@
|
||||
#include "stdafx.h"
|
||||
#include "Ryl_AgentServerParseData.h"
|
||||
|
||||
#include <Character/ModifyCharacter.h>
|
||||
#include <Stream/Buffer/Buffer.h>
|
||||
#include <Stream/Buffer/BufferFactory.h>
|
||||
#include <Item/ItemFactory.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include <Network/Buffer/Ryl_CumulateBuffer.h>
|
||||
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
|
||||
#include <Network/Session/Session.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
#include <Network/Packet/WrapPacket.h>
|
||||
#include <Network/Packet/PacketStruct/CharLoginOutPacketStruct.h>
|
||||
|
||||
|
||||
bool CAgentServerParseData::UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial,
|
||||
unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey)
|
||||
{
|
||||
SendInfo SetData;
|
||||
|
||||
SetData.m_dwSerial = dwSerial;
|
||||
SetData.m_dwUID = dwUID;
|
||||
SetData.m_dwCID = dwCID;
|
||||
SetData.m_dwRequestKey = dwRequestKey;
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_BASIC)
|
||||
{
|
||||
SEND_CHAR_BASIC_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_BASIC);
|
||||
}
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_EXTRA)
|
||||
{
|
||||
SEND_CHAR_EXTRA_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_EXTRA);
|
||||
}
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_FRIEND)
|
||||
{
|
||||
SEND_CHAR_FRIEND_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_FRIEND);
|
||||
}
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_BAN)
|
||||
{
|
||||
SEND_CHAR_BAN_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_BAN);
|
||||
}
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_STROE12)
|
||||
{
|
||||
SEND_STORE_12_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_STORE12);
|
||||
}
|
||||
|
||||
if (lpChar->m_byChangedInfo & CModifyCharacter::ON_STORE34)
|
||||
{
|
||||
SEND_STORE_34_DATA(lpChar, SetData);
|
||||
lpChar->OffChangedInfo(CModifyCharacter::OFF_STORE34);
|
||||
}
|
||||
|
||||
if (false == SEND_FINISH_UPDATE_DATA(SetData, lpChar->GetOldServerGroupID()))
|
||||
{
|
||||
ERRLOG0(g_Log, "SEND_FINISH_UPDATE_DATA 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_FINISH_UPDATE_DATA(CAgentServerParseData::SendInfo& SetData,
|
||||
unsigned char cOldServerGroupID)
|
||||
{
|
||||
CBuffer* lpBuffer =
|
||||
CREATE_BUFFER(m_lpSession->GetPolicy().GetBufferFactory(), sizeof(PktAgentServer::PktAdminToolSetData));
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(lpBuffer->begin());
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::FINISH_UPDATE_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = cOldServerGroupID;
|
||||
|
||||
PacketWrap::WrapHeader(lpBuffer,
|
||||
sizeof(PktAgentServer::PktAdminToolSetData), PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
if(!m_lpSession->SendPending(lpBuffer))
|
||||
{
|
||||
ERRLOG0(g_Log, "SEND_FINISH_UPDATE_DATA 패킷 전송 실패");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_CHAR_BASIC_DATA(CModifyCharacter* lpChar,
|
||||
CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
unsigned short usBufferSize =
|
||||
sizeof(PktAgentServer::PktAdminToolSetData) +
|
||||
sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB + DBUpdateData::MAX_DBUPDATE_SIZE;
|
||||
|
||||
CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession);
|
||||
|
||||
char* In_BasicPos = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(In_BasicPos);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
unsigned short* usSizeArray = reinterpret_cast<unsigned short*>(In_DataBuffer);
|
||||
int nBufferSize = DBUpdateData::MAX_DBUPDATE_SIZE;
|
||||
char* In_BasicInfo = static_cast<char*>(In_DataBuffer + sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB);
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_BASIC_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
lpChar->GetCharacterInfo(In_BasicInfo, &nBufferSize, usSizeArray);
|
||||
|
||||
unsigned int nPktLength = sizeof(PktAgentServer::PktAdminToolSetData) +
|
||||
sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB + nBufferSize;
|
||||
|
||||
cBuffer.ResizeLength(nPktLength); // 누적 패킷일때 주의!
|
||||
PacketWrap::WrapHeader(In_BasicPos, nPktLength, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_CHAR_EXTRA_DATA(CModifyCharacter* lpChar,
|
||||
CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
unsigned short usBufferSize = sizeof(CHAR_INFOEX) + sizeof(QUEST) + sizeof(HISTORY) +
|
||||
sizeof(CONFIG) + sizeof(STORE_INFO) + sizeof(PktAgentServer::PktAdminToolSetData);
|
||||
|
||||
CCumulateBuffer cBuffer(usBufferSize, m_lpSession);
|
||||
char* DataBuffer = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(DataBuffer);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
CModifyCharacter::CHAR_EXTRA_DATA& ExtraData = lpChar->GetExtraData();
|
||||
|
||||
CopyMemory(In_DataBuffer, &ExtraData.m_CharInfoEX, sizeof(CHAR_INFOEX));
|
||||
In_DataBuffer += sizeof(CHAR_INFOEX);
|
||||
CopyMemory(In_DataBuffer, &ExtraData.m_Quest, sizeof(QUEST));
|
||||
In_DataBuffer += sizeof(QUEST);
|
||||
CopyMemory(In_DataBuffer, &ExtraData.m_History, sizeof(HISTORY));
|
||||
In_DataBuffer += sizeof(HISTORY);
|
||||
CopyMemory(In_DataBuffer, &ExtraData.m_Config, sizeof(CONFIG));
|
||||
In_DataBuffer += sizeof(CONFIG);
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_EXTRA_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
LPSTORE_INFO lpStoreInfo = reinterpret_cast<LPSTORE_INFO>(In_DataBuffer);
|
||||
Item::CDepositContainer& DepositContainer = lpChar->GetDeposit();
|
||||
|
||||
memcpy(lpStoreInfo->Password, DepositContainer.GetPassword(), 4);
|
||||
|
||||
lpStoreInfo->Password[4] = 0;
|
||||
lpStoreInfo->Flag = DepositContainer.GetTabFlag();
|
||||
lpStoreInfo->Gold = DepositContainer.GetGold();
|
||||
|
||||
PacketWrap::WrapHeader(DataBuffer, usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_CHAR_FRIEND_DATA(CModifyCharacter* lpChar,
|
||||
CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
CFriendList& FriendList = lpChar->GetFriendList();
|
||||
unsigned short usBufferSize =
|
||||
sizeof(FriendInfo) * CFriendList::MAX_FRIENDS_NUM + sizeof(PktAgentServer::PktAdminToolSetData);
|
||||
|
||||
CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession);
|
||||
char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(lpDataBuffer);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_FRIEND_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
unsigned long nBufferSize = sizeof(FriendInfo) * CFriendList::MAX_FRIENDS_NUM;
|
||||
|
||||
FriendList.SerializeOut(In_DataBuffer, nBufferSize);
|
||||
|
||||
cBuffer.ResizeLength(sizeof(PktAgentServer::PktAdminToolSetData) + nBufferSize);
|
||||
|
||||
PacketWrap::WrapHeader(lpDataBuffer,
|
||||
(sizeof(PktAgentServer::PktAdminToolSetData) + (unsigned short)nBufferSize),
|
||||
PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_CHAR_BAN_DATA(CModifyCharacter* lpChar,
|
||||
CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
CBanList& BanList = lpChar->GetBanList();
|
||||
unsigned short usBufferSize =
|
||||
sizeof(BanInfo) * CBanList::MAX_BAN_NUM + sizeof(PktAgentServer::PktAdminToolSetData);
|
||||
|
||||
CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession);
|
||||
|
||||
char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(lpDataBuffer);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_BAN_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
unsigned long nBufferSize = sizeof(BanInfo) * CBanList::MAX_BAN_NUM;
|
||||
BanList.SerializeOut(In_DataBuffer, nBufferSize);
|
||||
|
||||
cBuffer.ResizeLength(sizeof(PktAgentServer::PktAdminToolSetData) + nBufferSize);
|
||||
|
||||
PacketWrap::WrapHeader(lpDataBuffer,
|
||||
(sizeof(PktAgentServer::PktAdminToolSetData) + (unsigned short)nBufferSize),
|
||||
PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_STORE_12_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
unsigned short usBufferSize = sizeof(STORE) + sizeof(PktAgentServer::PktAdminToolSetData);
|
||||
CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession);
|
||||
|
||||
char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(lpDataBuffer);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
Item::CDepositContainer& DepositContainer = lpChar->GetDeposit();
|
||||
LPSTORE lpStore = reinterpret_cast<LPSTORE>(In_DataBuffer);
|
||||
|
||||
const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab(0);
|
||||
const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab(1);
|
||||
ZeroMemory(lpDataBuffer, usBufferSize);
|
||||
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::STORE_12_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
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);
|
||||
PacketWrap::WrapHeader(lpDataBuffer,
|
||||
usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cBuffer.ResizeLength(0);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CAgentServerParseData::SEND_STORE_34_DATA(CModifyCharacter* lpChar,
|
||||
CAgentServerParseData::SendInfo& SetData)
|
||||
{
|
||||
unsigned short usBufferSize = sizeof(STORE) + sizeof(PktAgentServer::PktAdminToolSetData);
|
||||
|
||||
CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession);
|
||||
char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize);
|
||||
|
||||
PktAgentServer::PktAdminToolSetData* lpPktSetData =
|
||||
reinterpret_cast<PktAgentServer::PktAdminToolSetData*>(lpDataBuffer);
|
||||
|
||||
char* In_DataBuffer = reinterpret_cast<char*>(lpPktSetData + 1);
|
||||
Item::CDepositContainer& DepositContainer = lpChar->GetDeposit();
|
||||
LPSTORE lpStore = reinterpret_cast<LPSTORE>(In_DataBuffer);
|
||||
|
||||
const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab(2);
|
||||
const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab(3);
|
||||
|
||||
ZeroMemory(lpDataBuffer, usBufferSize);
|
||||
lpPktSetData->m_dwSerial = SetData.m_dwSerial;
|
||||
lpPktSetData->m_dwUID = SetData.m_dwUID;
|
||||
lpPktSetData->m_dwCID = SetData.m_dwCID;
|
||||
lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey;
|
||||
lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::STORE_34_DATA;
|
||||
lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID();
|
||||
|
||||
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);
|
||||
PacketWrap::WrapHeader(lpDataBuffer,
|
||||
usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
cBuffer.ResizeLength(0);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include < Stream/Buffer/Buffer.h >
|
||||
#include < Stream/Buffer/BufferFactory.h >
|
||||
#include < Network/Session/Session.h >
|
||||
#include < Network/Buffer/Ryl_CumulateBuffer.h >
|
||||
|
||||
//사용용도는 Loop나 연속적으로 패킷을 보낼상항이 생겼을경우 일단 이놈한테 누적시키고 보내버리자....
|
||||
|
||||
CCumulateBuffer::CCumulateBuffer(unsigned long BufferLength, CSession* pSession)
|
||||
{
|
||||
m_lpBuffer = new char[BufferLength];
|
||||
|
||||
m_lpSession = pSession;
|
||||
|
||||
m_lpNowPos = m_lpBuffer;
|
||||
m_lpEndPos = m_lpBuffer + BufferLength;
|
||||
|
||||
m_BufferLength = BufferLength;
|
||||
m_FillLength = 0;
|
||||
}
|
||||
|
||||
CCumulateBuffer::~CCumulateBuffer( )
|
||||
{
|
||||
if(m_FillLength) SendAll();
|
||||
|
||||
if(m_lpBuffer)
|
||||
{
|
||||
delete [] m_lpBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
char* CCumulateBuffer::GetBuffer(unsigned int Length)
|
||||
{
|
||||
if((m_lpNowPos + Length) > m_lpEndPos)
|
||||
{
|
||||
//버퍼에 더이상 들어갈 공간이 없다 버퍼의 내용을 전부 비우자.
|
||||
//버퍼에 누적된 패킷을 전부 보내버리잣..
|
||||
if(!SendAll())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
char* PktPos = m_lpNowPos;
|
||||
|
||||
m_lpNowPos += Length; // 다음 패킷이 누적될 포인터
|
||||
m_FillLength += Length; // 현재 버퍼 사용량
|
||||
|
||||
return PktPos; // 누적될 지점
|
||||
}
|
||||
|
||||
|
||||
//PktBase를 상속받은 패킷을 꼭~ WrapHeader을 해줘야한다 안하면 싼다..
|
||||
bool CCumulateBuffer::SendAll()
|
||||
{
|
||||
CBuffer* SendBuffer = CREATE_BUFFER(m_lpSession->GetPolicy().GetBufferFactory(), m_FillLength);
|
||||
|
||||
if((SendBuffer == NULL) || (m_lpSession == NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SendBuffer->push(m_lpBuffer, m_FillLength);
|
||||
|
||||
m_lpNowPos = m_lpBuffer;
|
||||
m_FillLength = 0;
|
||||
|
||||
return m_lpSession->SendPending(SendBuffer);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef _CUMULATE_BUFFER_H_
|
||||
#define _CUMULATE_BUFFER_H_
|
||||
|
||||
class CBuffer;
|
||||
class CSession;
|
||||
|
||||
// 패킷 누적버퍼
|
||||
class CCumulateBuffer
|
||||
{
|
||||
public:
|
||||
CCumulateBuffer(unsigned long BufferLength, CSession* pSession);
|
||||
~CCumulateBuffer();
|
||||
|
||||
char* GetBuffer(unsigned int Length); // 할당된 버퍼 얻기
|
||||
|
||||
bool SendAll(); // 현재 버퍼에 있는 내용을 전부 보내기
|
||||
|
||||
// 사용중인 버퍼길이 강제 조정
|
||||
void ResizeLength(unsigned int FillLength) { m_FillLength = FillLength; }
|
||||
|
||||
private:
|
||||
char* m_lpBuffer;
|
||||
|
||||
char* m_lpNowPos;
|
||||
char* m_lpEndPos;
|
||||
|
||||
CSession* m_lpSession;
|
||||
|
||||
unsigned int m_FillLength;
|
||||
unsigned int m_BufferLength;
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user