tibia-client/src/framework/net/outputmessage.cpp

75 lines
1.5 KiB
C++
Raw Normal View History

2011-08-15 16:06:15 +02:00
#include <framework/net/outputmessage.h>
2011-05-21 21:02:37 +02:00
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
}