You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.5 KiB

#include <net/outputmessage.h>
OutputMessage::OutputMessage()
{
reset();
}
void OutputMessage::reset()
{
m_writePos = DATA_POS;
m_messageSize = 0;
}
void OutputMessage::addU8(uint8 value)
{
assert(canWrite(1));
m_buffer[m_writePos] = value;
m_writePos += 1;
m_messageSize += 1;
}
void OutputMessage::addU16(uint16 value)
{
assert(canWrite(2));
*(uint16_t*)(m_buffer + m_writePos) = value;
m_writePos += 2;
m_messageSize += 2;
}
void OutputMessage::addU32(uint32 value)
{
assert(canWrite(4));
*(uint32*)(m_buffer + m_writePos) = value;
m_writePos += 4;
m_messageSize += 4;
}
void OutputMessage::addU64(uint64 value)
{
assert(canWrite(8));
*(uint64*)(m_buffer + m_writePos) = value;
m_writePos += 8;
m_messageSize += 8;
}
void OutputMessage::addString(const char* value)
{
size_t stringLength = strlen(value);
assert(stringLength < 0xFFFF && canWrite(stringLength + 2));
addU16(stringLength);
strcpy((char*)(m_buffer + m_writePos), value);
m_writePos += stringLength;
m_messageSize += stringLength;
}
void OutputMessage::addString(const std::string &value)
{
addString(value.c_str());
}
void OutputMessage::addPaddingBytes(int bytes, uint8 byte)
{
assert(canWrite(bytes) && bytes >= 0);
memset((void*)&m_buffer[m_writePos], byte, bytes);
m_writePos += bytes;
m_messageSize += bytes;
}
bool OutputMessage::canWrite(int bytes)
{
if(m_writePos + bytes > BUFFER_MAXSIZE)
return false;
return true;
}