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:
108
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.cpp
Normal file
108
GameTools/GLOBALSCRIPT/Network/ClientSocket/Packet.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
#include "stdafx.h"
|
||||
#include "Packet.h"
|
||||
|
||||
#include <Network/Packet/PacketBase.h>
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
CMemoryPool::CMemoryPool(size_t nPerAllocateSize, size_t nPerAllocateNum)
|
||||
: m_nPerAllocateSize(nPerAllocateSize), m_nPerAllocateNum(nPerAllocateNum)
|
||||
{
|
||||
for(size_t nCount = 0; nCount < m_nPerAllocateNum; ++nCount)
|
||||
{
|
||||
m_Pool.push_back(new char[m_nPerAllocateSize]);
|
||||
}
|
||||
}
|
||||
|
||||
struct FnPoolDeleteArray
|
||||
{
|
||||
bool operator () (char* lpPtr)
|
||||
{
|
||||
if(NULL != lpPtr)
|
||||
{
|
||||
delete [] lpPtr;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
CMemoryPool::~CMemoryPool()
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
std::for_each(m_Pool.begin(), m_Pool.end(), FnPoolDeleteArray());
|
||||
}
|
||||
|
||||
void* CMemoryPool::Alloc(size_t size)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
|
||||
if(m_Pool.empty())
|
||||
{
|
||||
for(size_t nCount = 0; nCount < m_nPerAllocateNum; ++nCount)
|
||||
{
|
||||
m_Pool.push_back(new char[m_nPerAllocateSize]);
|
||||
}
|
||||
}
|
||||
|
||||
char* lpResult = m_Pool.back();
|
||||
m_Pool.pop_back();
|
||||
return lpResult;
|
||||
}
|
||||
|
||||
void CMemoryPool::Free(void* ptr)
|
||||
{
|
||||
CCSLock::Syncronize sync(m_PoolLock);
|
||||
m_Pool.push_back(reinterpret_cast<char*>(ptr));
|
||||
}
|
||||
|
||||
|
||||
CMemoryPool CPacket::ms_PacketPool(sizeof(CPacket), 20);
|
||||
|
||||
CPacket::CPacket()
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
}
|
||||
|
||||
CPacket::CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned short State_In, unsigned short Error_In)
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
((PktBase* )m_Buffer)->InitPtHead(Len_In, Cmd_In, State_In, Error_In);
|
||||
}
|
||||
|
||||
CPacket::CPacket(unsigned short Len_In, unsigned char Cmd_In, unsigned long Tick_In)
|
||||
: m_Len(0), m_nRefCount(1), m_bWrap(false)
|
||||
{
|
||||
((PktBase* )m_Buffer)->InitPtHead(Len_In, Cmd_In, Tick_In);
|
||||
}
|
||||
|
||||
CPacket::~CPacket()
|
||||
{
|
||||
}
|
||||
|
||||
bool CPacket::WrapPacket(bool Crypt_In)
|
||||
{
|
||||
CXORCrypt& Crypt = CXORCrypt::GetInstance();
|
||||
|
||||
DWORD dwCodePage = Crypt.GetCodePage();
|
||||
PktBase* lpBasePt = (PktBase* )m_Buffer;
|
||||
|
||||
m_Len = lpBasePt->GetLen();
|
||||
|
||||
if(m_bWrap)
|
||||
return false;
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20><>Ŷ
|
||||
if(Crypt_In)
|
||||
{
|
||||
Crypt.EncodePacket(m_Buffer + PktBaseSize, m_Len - PktBaseSize, dwCodePage);
|
||||
|
||||
lpBasePt->SetCodePage(dwCodePage);
|
||||
lpBasePt->SetCrypt();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20>ش<EFBFBD>
|
||||
Crypt.EncodeHeader(m_Buffer + 1, PktBaseSize - 1, 0, 0);
|
||||
return m_bWrap = true;
|
||||
}
|
||||
Reference in New Issue
Block a user