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,92 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "AdminToolDispatch.h"
|
||||
|
||||
#include < Network/Packet/PacketBase.h >
|
||||
#include < Network/Packet/WrapPacket.h >
|
||||
#include < Network/XORCrypt/XORCrypt.h >
|
||||
|
||||
#include < Utility/Compress/MiniLZO/miniLZOWrapper.h >
|
||||
#include < Log/ServerLog.h >
|
||||
|
||||
bool CClientMultiThreadDispatch::ParsePacket( char* const lpStream_In, unsigned long* dwStreamSize_InOut )
|
||||
{
|
||||
CXORCrypt& Crypt = CXORCrypt::GetInstance();
|
||||
|
||||
PktBase* lpPktBase = NULL;
|
||||
char* lpBufferPos = lpStream_In;
|
||||
|
||||
unsigned long dwStreamSize = *dwStreamSize_InOut;
|
||||
unsigned long dwDecompressedSize = 0;
|
||||
char szDecompressedPacket[PktMaxLen] = "";
|
||||
|
||||
while(dwStreamSize >= sizeof(PktBase))
|
||||
{
|
||||
lpPktBase = reinterpret_cast<PktBase*>(lpBufferPos);
|
||||
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vaild<6C><64><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>. invalid<69><64> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if(StartBit != lpPktBase->GetStartBit())
|
||||
{
|
||||
PktBase::CMDType cCmd = lpPktBase->GetCmd();
|
||||
Crypt.DecodeHeader(reinterpret_cast<char*>(&cCmd), 1, 0, 0);
|
||||
//LogErrorPacket("<22><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>߸<EFBFBD><DFB8>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.", cCmd);
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD>
|
||||
Crypt.DecodeHeader(lpBufferPos + 1, sizeof(PktBase) - 1, 0, 0);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
const PktBase::CMDType nPacketCMD = lpPktBase->GetCmd();
|
||||
const PktBase::LengthType nPacketLength = lpPktBase->GetLen();
|
||||
|
||||
if(dwStreamSize < nPacketLength)
|
||||
{
|
||||
// <20><>ü <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD> <20>Ľ<EFBFBD><C4BD><EFBFBD> <20>ϱ<CFB1><E2BFA1> <20><><EFBFBD>ڶ<EFBFBD>. <20>ٽ<EFBFBD> <20><><EFBFBD>ڵ<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>
|
||||
Crypt.EncodeHeader(lpBufferPos + 1, sizeof(PktBase) - 1, 0, 0);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><>Ŷ <20><><EFBFBD>ڵ<EFBFBD>.
|
||||
if(lpPktBase->IsCrypt())
|
||||
{
|
||||
Crypt.DecodePacket(lpBufferPos + sizeof(PktBase),
|
||||
nPacketLength - sizeof(PktBase), lpPktBase->GetCodePage());
|
||||
}
|
||||
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
if(lpPktBase->IsCompress())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
|
||||
// return false;
|
||||
dwDecompressedSize = PktMaxLen - sizeof(PktBase);
|
||||
memcpy(szDecompressedPacket, lpPktBase, sizeof(PktBase));
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
if(!CMiniLZO::Decompress(lpBufferPos + sizeof(PktBase), nPacketLength - sizeof(PktBase),
|
||||
szDecompressedPacket + sizeof(PktBase), &dwDecompressedSize))
|
||||
{
|
||||
//LogErrorPacket("<22><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.", nPacketCMD);
|
||||
return false;
|
||||
}
|
||||
|
||||
// lpPktBase<73><65> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
lpPktBase = reinterpret_cast<PktBase*>(szDecompressedPacket);
|
||||
lpPktBase->SetLen(static_cast<PktBase::LengthType>(dwDecompressedSize + sizeof(PktBase)));
|
||||
}
|
||||
|
||||
if(!DispatchPacket(lpPktBase))
|
||||
{
|
||||
// <20><>Ŷ <20>Ľ̿<C4BD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
return false;
|
||||
}
|
||||
|
||||
dwStreamSize -= nPacketLength;
|
||||
lpBufferPos += nPacketLength;
|
||||
}
|
||||
}
|
||||
|
||||
*dwStreamSize_InOut -= dwStreamSize;
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
#ifndef _ADMIN_TOOL_DISPATCH_H_
|
||||
#define _ADMIN_TOOL_DISPATCH_H_
|
||||
|
||||
struct PktBase;
|
||||
|
||||
class CSingleSession;
|
||||
class CWnd;
|
||||
class CPacketToolDispatch
|
||||
{
|
||||
public:
|
||||
|
||||
// Desc: <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// Input: const char* lpStream_In : <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// size_t* nStreamSize_InOut : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
|
||||
// Output: size_t* nStreamSize_InOut : ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>.
|
||||
// <20><><EFBFBD>ϰ<EFBFBD> : false <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (<28>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
virtual bool ParsePacket(char* const lpStream_In, unsigned long* dwStreamSize_InOut) = 0;
|
||||
|
||||
// Desc: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
// (CSession::Process <20><><EFBFBD><EFBFBD> <20><> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>Ѵ<EFBFBD>.)
|
||||
virtual bool SingleThreadDispatch(unsigned long dwCurrentTime) = 0;
|
||||
|
||||
// Desc: <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// Output: <20><><EFBFBD>ϰ<EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>н<EFBFBD> NULL <20><><EFBFBD><EFBFBD>
|
||||
virtual CPacketToolDispatch* Clone() = 0;
|
||||
|
||||
// Desc: <20>ڱ<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
virtual void Destroy() = 0;
|
||||
|
||||
// Desc: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
virtual void Disconnected() = 0;
|
||||
|
||||
// Desc: <20><><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD> <20><>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>.
|
||||
inline void SetSession(CSingleSession* lpSession) { m_lpSession = lpSession; }
|
||||
inline CSingleSession* GetSession() { return m_lpSession; }
|
||||
|
||||
virtual ~CPacketToolDispatch() { }
|
||||
|
||||
protected:
|
||||
|
||||
// Dispatcher<65><72> <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> <20><EFBFBD> Protected<65>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
CPacketToolDispatch() : m_lpSession(0) { }
|
||||
CSingleSession* m_lpSession;
|
||||
};
|
||||
|
||||
class CClientMultiThreadDispatch : public CPacketToolDispatch
|
||||
{
|
||||
public:
|
||||
CClientMultiThreadDispatch( ) { m_pDispatchWindow = NULL; }
|
||||
|
||||
virtual bool ParsePacket(char* const lpStream_In, unsigned long* dwStreamSize_InOut);
|
||||
virtual bool SingleThreadDispatch(unsigned long dwCurrentTime) { return true; }
|
||||
|
||||
protected:
|
||||
|
||||
virtual bool DispatchPacket(PktBase* lpPktBase) = 0;
|
||||
|
||||
virtual ~CClientMultiThreadDispatch() { }
|
||||
|
||||
CWnd* m_pDispatchWindow;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user