Program Listing for File messages.cpp¶
↰ Return to documentation for file (blam\components\networking\messages.cpp
)
#include "messages.h"
#include "components\core\engine_definitions\engine_definitions.h"
BYTE Blam::Reader::ReadByte(UINT8** buffer)
{
BYTE value = -1;
value = **buffer;
*buffer = *buffer + 1;
return value;
}
UINT16 Blam::Reader::ReadShort(UINT8** buffer)
{
UINT16 value = -1;
memcpy(&value, *buffer, sizeof(value));
*buffer = *buffer + sizeof(value);
value = ntohs(value);
return value;
}
UINT32 Blam::Reader::ReadInt(UINT8** buffer)
{
UINT32 value = -1;
memcpy(&value, *buffer, sizeof(value));
*buffer = *buffer + sizeof(value);
value = ntohs(value);
return value;
}
UINT64 Blam::Reader::ReadLong(UINT8** buffer)
{
UINT64 value = -1;
memcpy(&value, *buffer, sizeof(value));
*buffer = *buffer + sizeof(value);
value = ntohs(value);
return value;
}
const char* Blam::Reader::ReadString(UINT8** buffer)
{
const char* value = "";
memcpy(&value, *buffer, strlen(value));
*buffer = *buffer + strlen(value);
return value;
}
static void Blam::Writer::WriteByte(UINT8** buffer, UINT8 value)
{
**buffer = value;
*buffer = *buffer + 1;
}
static void Blam::Writer::WriteShort(UINT8** buffer, UINT16 value)
{
value = ntohs(value);
memcpy(*buffer, &value, sizeof(value));
*buffer = *buffer + sizeof(value);
}
static void Blam::Writer::WriteInt(UINT8** buffer, UINT32 value)
{
value = ntohl(value);
memcpy(*buffer, &value, sizeof(value));
*buffer = *buffer + sizeof(value);
}
static void Blam::Writer::WriteLong(UINT8** buffer, UINT64 value)
{
value = ntohl(value);
memcpy(*buffer, &value, sizeof(value));
*buffer = *buffer + sizeof(value);
}
static void Blam::Writer::WriteString(UINT8** buffer, const char* value)
{
// IF statement is a precaution if the client doesn't know what to write (nullptr) so we send a "null" string
// It's there to prevent memcpy from having a bitch fit in other words...
if (value == nullptr || value == NULL)
{
void const* value = reinterpret_cast<void const*>(-1);
memcpy(*buffer, &value, sizeof(&value));
*buffer = *buffer + sizeof(&value);
}
else
{
UINT32 length = strlen(value);
WriteInt(buffer, length);
memcpy(*buffer, value, strlen(value));
*buffer = *buffer + strlen(value);
}
}
UINT32 Blam::Network::ClientHelloMessage(UINT8* buffer)
{
UINT8* bufferIter = buffer;
Writer::WriteShort(&bufferIter, ClientHello);
Writer::WriteString(&bufferIter, EngineDefs::GetVersion());
Writer::WriteShort(&bufferIter, 0);
Writer::WriteInt(&bufferIter, 1);
Writer::WriteLong(&bufferIter, 2);
return (UINT32)(bufferIter - buffer); // length
}
UINT32 Blam::Network::KeepAliveMessage(UINT8* buffer)
{
UINT8* bufferIter = buffer;
Writer::WriteShort(&bufferIter, KeepAlive);
Writer::WriteString(&bufferIter, __TIME__);
return (UINT32)(bufferIter - buffer);
}