2011-05-21 21:02:37 +02:00
|
|
|
#include <net/outputmessage.h>
|
|
|
|
|
|
|
|
OutputMessage::OutputMessage()
|
|
|
|
{
|
|
|
|
reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::reset()
|
|
|
|
{
|
2011-05-30 05:11:12 +02:00
|
|
|
m_writePos = DATA_POS;
|
2011-05-21 21:02:37 +02:00
|
|
|
m_messageSize = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::addU8(uint8 value)
|
|
|
|
{
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(canWrite(1));
|
2011-05-21 21:02:37 +02:00
|
|
|
m_buffer[m_writePos] = value;
|
|
|
|
m_writePos += 1;
|
|
|
|
m_messageSize += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::addU16(uint16 value)
|
|
|
|
{
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(canWrite(2));
|
2011-05-21 21:02:37 +02:00
|
|
|
*(uint16_t*)(m_buffer + m_writePos) = value;
|
|
|
|
m_writePos += 2;
|
|
|
|
m_messageSize += 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::addU32(uint32 value)
|
|
|
|
{
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(canWrite(4));
|
2011-05-21 21:02:37 +02:00
|
|
|
*(uint32*)(m_buffer + m_writePos) = value;
|
|
|
|
m_writePos += 4;
|
|
|
|
m_messageSize += 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::addU64(uint64 value)
|
|
|
|
{
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(canWrite(8));
|
2011-05-21 21:02:37 +02:00
|
|
|
*(uint64*)(m_buffer + m_writePos) = value;
|
|
|
|
m_writePos += 8;
|
|
|
|
m_messageSize += 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
void OutputMessage::addString(const char* value)
|
|
|
|
{
|
|
|
|
size_t stringLength = strlen(value);
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(stringLength < 0xFFFF && canWrite(stringLength + 2));
|
2011-05-21 21:02:37 +02:00
|
|
|
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());
|
|
|
|
}
|
|
|
|
|
2011-05-30 05:11:12 +02:00
|
|
|
void OutputMessage::addPaddingBytes(int bytes, uint8 byte)
|
|
|
|
{
|
2011-07-28 01:01:33 +02:00
|
|
|
assert(canWrite(bytes) && bytes >= 0);
|
2011-05-30 05:11:12 +02:00
|
|
|
memset((void*)&m_buffer[m_writePos], byte, bytes);
|
|
|
|
m_writePos += bytes;
|
|
|
|
m_messageSize += bytes;
|
|
|
|
}
|
|
|
|
|
2011-05-21 21:02:37 +02:00
|
|
|
bool OutputMessage::canWrite(int bytes)
|
|
|
|
{
|
2011-05-31 07:24:30 +02:00
|
|
|
if(m_writePos + bytes > BUFFER_MAXSIZE)
|
2011-07-28 01:01:33 +02:00
|
|
|
return false;
|
2011-05-31 07:24:30 +02:00
|
|
|
return true;
|
2011-05-21 21:02:37 +02:00
|
|
|
}
|