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:
191
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/SocketIO.cpp
Normal file
191
GameTools/GLOBALSCRIPT/Network/ClientSocket/Socket/SocketIO.cpp
Normal file
@@ -0,0 +1,191 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SocketIO Class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#include "SocketIO.h"
|
||||
|
||||
#include <Network/XORCrypt/XORCrypt.h>
|
||||
#include <Utility/Compress/MiniLZO/MiniLZOWrapper.h>
|
||||
|
||||
SocketIO::SocketIO(void)
|
||||
: m_ServerState(ServerInfo::SS_SMOOTH), m_PacketCount(0), m_Crypt(CXORCrypt::GetInstance())
|
||||
{
|
||||
Socket::InitWinsock();
|
||||
}
|
||||
|
||||
SocketIO::~SocketIO(void)
|
||||
{
|
||||
Socket::ReleaseWinsock();
|
||||
}
|
||||
|
||||
int SocketIO::Send(SOCKET Socket_In, WSABUF SendData_In)
|
||||
{
|
||||
int send_byte;
|
||||
|
||||
send_byte = send(Socket_In, (char *)SendData_In.buf, SendData_In.len, 0);
|
||||
if(send_byte == SOCKET_ERROR || (int)SendData_In.len != send_byte)
|
||||
return 0;
|
||||
|
||||
return send_byte;
|
||||
}
|
||||
|
||||
int SocketIO::SendTo(SOCKET Socket_In, SOCKADDR_IN Addreess_In, WSABUF SendData_In)
|
||||
{
|
||||
int AddressSize = sizeof(SOCKADDR_IN);
|
||||
int send_byte = 0;
|
||||
|
||||
send_byte = sendto(Socket_In, (char *)SendData_In.buf, SendData_In.len, 0, (struct sockaddr *)&Addreess_In, AddressSize);
|
||||
if(send_byte == SOCKET_ERROR || (int)SendData_In.len != send_byte)
|
||||
return 0;
|
||||
|
||||
return send_byte;
|
||||
}
|
||||
|
||||
int SocketIO::Recv(SOCKET Socket_In, WSABUF &RecvData_In)
|
||||
{
|
||||
DWORD recv_byte;
|
||||
|
||||
if((recv_byte = recv(Socket_In, RecvData_In.buf, BufferSize, 0)) != SOCKET_ERROR)
|
||||
{
|
||||
RecvData_In.len = recv_byte;
|
||||
return recv_byte;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SocketIO::RecvFrom(SOCKET Socket_In, WSABUF &RecvData_In, LPSOCKADDR_IN Address_Out)
|
||||
{
|
||||
int AddressSize = sizeof(SOCKADDR_IN);
|
||||
|
||||
DWORD recv_byte;
|
||||
|
||||
if((recv_byte = recvfrom(Socket_In, RecvData_In.buf, BufferSize, 0, (struct sockaddr *)Address_Out, &AddressSize)) != SOCKET_ERROR)
|
||||
{
|
||||
RecvData_In.len = recv_byte;
|
||||
return recv_byte;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SocketIO::PutRecvBufferToPtBuffer(char *pBuffer_Out, int BufferSize_In, WSABUF &RecvData_In, char *RecvBuffer_In, unsigned short PageVer_In, unsigned char PageNum_In)
|
||||
{
|
||||
LPPktBase lpPktBase = NULL;;
|
||||
if(pBuffer_Out == NULL || RecvData_In.len == 0)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
lpPktBase = (LPPktBase)RecvData_In.buf;
|
||||
|
||||
if(lpPktBase->GetStartBit() != StartBit)
|
||||
{
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
if(RecvData_In.buf != RecvBuffer_In)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><>Ŷ <20><><EFBFBD><EFBFBD> )
|
||||
RecvData_In.len = static_cast<u_long>((RecvData_In.buf - RecvBuffer_In) + RecvData_In.len);
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
RecvData_In.len = 0;
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
lpPktBase = (LPPktBase)RecvData_In.buf;
|
||||
if(lpPktBase->GetStartBit() == StartBit)
|
||||
{
|
||||
// <20><><EFBFBD>ڵ<EFBFBD> <20>ش<EFBFBD>
|
||||
if(RecvData_In.len < PktBaseSize)
|
||||
{
|
||||
// <20>߸<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> )
|
||||
RecvData_In.buf = RecvData_In.buf + RecvData_In.len;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
m_Crypt.DecodeHeader((char *)lpPktBase + 1, PktBaseSize - 1, PageVer_In, PageNum_In);
|
||||
|
||||
unsigned short PacketLength = lpPktBase->GetLen();
|
||||
if(PktMinLen <= PacketLength && PacketLength <= PktMaxLen)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
if(PacketLength <= RecvData_In.len)
|
||||
{
|
||||
if(lpPktBase->IsCrypt())
|
||||
{
|
||||
m_Crypt.DecodePacket((char *)lpPktBase + PktBaseSize, PacketLength - PktBaseSize, lpPktBase->GetCodePage());
|
||||
}
|
||||
|
||||
if(lpPktBase->IsCompress())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3>
|
||||
DWORD Len = BufferSize_In;
|
||||
|
||||
CopyMemory(pBuffer_Out, (char *)lpPktBase, PktBaseSize);
|
||||
CMiniLZOCompress::Decompress((char *)lpPktBase + PktBaseSize, PacketLength - PktBaseSize, pBuffer_Out + PktBaseSize, &Len);
|
||||
lpPktBase->SetLen((unsigned short)Len + PktBaseSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><> <20><><EFBFBD><EFBFBD> <20><>Ŷ ó<><C3B3>
|
||||
CopyMemory(pBuffer_Out, (char *)lpPktBase, PacketLength);
|
||||
}
|
||||
|
||||
RecvData_In.len = RecvData_In.len - PacketLength;
|
||||
if(RecvData_In.len)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CopyMemory((char *)lpPktBase, (char *)lpPktBase + PacketLength, RecvData_In.len);
|
||||
}
|
||||
|
||||
return PacketLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Crypt.EncodeHeader((char *)lpPktBase + 1, PktBaseSize - 1, PageVer_In, PageNum_In);
|
||||
|
||||
// <20>߸<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> )
|
||||
RecvData_In.buf = RecvData_In.buf + RecvData_In.len;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20>߸<EFBFBD><DFB8><EFBFBD> <20><>Ŷ ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
RecvData_In.buf = RecvBuffer_In;
|
||||
RecvData_In.len = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user