1
0

Packets now parse themselves from a cByteBuffer object (1st part of packeting rewrite, http://forum.mc-server.org/showthread.php?tid=524 )

git-svn-id: http://mc-server.googlecode.com/svn/trunk@744 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com
2012-08-17 10:18:07 +00:00
parent 33ca4d5003
commit 70a4ca5bc1
57 changed files with 684 additions and 352 deletions

View File

@@ -28,160 +28,6 @@
int cPacket::ReadString16(const char * a_Data, int a_Size, AString & a_OutString )
{
int TotalBytes = 0;
short StrLen;
HANDLE_PACKET_READ(ReadShort, StrLen, TotalBytes);
if (2 * StrLen > a_Size - TotalBytes)
{
// The string is not yet complete in the buffer
return PACKET_INCOMPLETE;
}
// Simple UTF-16 to UTF-8 conversion - discard higher bits, ignore multishort sequences:
a_OutString.clear();
a_OutString.reserve(StrLen);
short * UTF16 = (short *)(a_Data + TotalBytes);
for ( int i = 0; i < StrLen; ++i )
{
a_OutString.push_back( (char)ntohs(UTF16[i]) );
}
return TotalBytes + StrLen * sizeof(short);
}
int cPacket::ReadShort(const char * a_Data, int a_Size, short & a_OutShort )
{
if (a_Size < 2)
{
return PACKET_INCOMPLETE;
}
a_OutShort = ntohs(*((short *)a_Data));
return 2;
}
int cPacket::ReadInteger(const char * a_Data, int a_Size, int & a_OutInteger )
{
if (a_Size < 4)
{
return PACKET_INCOMPLETE;
}
a_OutInteger = ntohl(*((int *)a_Data));
return 4;
}
int cPacket::ReadInteger(const char * a_Data, int a_Size, unsigned int & a_OutInteger )
{
if (a_Size < 4)
{
return PACKET_INCOMPLETE;
}
a_OutInteger = ntohl(*((unsigned int *)a_Data));
return 4;
}
int cPacket::ReadFloat(const char * a_Data, int a_Size, float & a_OutFloat )
{
if (a_Size < sizeof(float))
{
return PACKET_INCOMPLETE;
}
a_OutFloat = NetworkToHostFloat4(a_Data);
return sizeof(float);
}
int cPacket::ReadDouble(const char * a_Data, int a_Size, double & a_OutDouble )
{
if (a_Size < sizeof(double))
{
return PACKET_INCOMPLETE;
}
a_OutDouble = NetworkToHostDouble8(a_Data);
return sizeof(double);
}
int cPacket::ReadByte(const char * a_Data, int a_Size, char & a_OutByte )
{
if (a_Size < 1)
{
return PACKET_INCOMPLETE;
}
a_OutByte = *a_Data;
return 1;
}
int cPacket::ReadByte(const char * a_Data, int a_Size, unsigned char & a_OutByte )
{
if (a_Size < 1)
{
return PACKET_INCOMPLETE;
}
a_OutByte = *((unsigned char *)a_Data);
return 1;
}
int cPacket::ReadLong(const char * a_Data, int a_Size, long long & a_OutLong )
{
if (a_Size < sizeof(a_OutLong))
{
return PACKET_INCOMPLETE;
}
a_OutLong = NetworkToHostLong8(a_Data);
return sizeof(a_OutLong);
}
int cPacket::ReadBool(const char * a_Data, int a_Size, bool & a_OutBool )
{
if (a_Size < sizeof(bool))
{
return PACKET_INCOMPLETE;
}
a_OutBool = (*a_Data != 0);
return sizeof(bool);
}
void cPacket::AppendString(AString & a_Dst, const AString & a_String)
{
AppendShort(a_Dst, (unsigned short)a_String.size());