#include "clientmessagebase.h"
#include "connectionprofiler.h"

#include <QIODevice>
ClientMessageBase::ClientMessageBase()
{
}

void ClientMessageBase::writeBool( QIODevice *device, bool input ) const
{
    char buffer[1] = {0};
    buffer[0] = (input ? 0x01 : 0x00);
    device->write(buffer, 1);
    ConnectionProfiler::instance()->addWriteBytes(1);
}

void ClientMessageBase::writeUint8( QIODevice *device, quint8 input ) const
{
    char buffer[1] = {0};
    buffer[0] = input;
    device->write(buffer, 1);
    ConnectionProfiler::instance()->addWriteBytes(1);
}

void ClientMessageBase::writeUint16( QIODevice *device, quint16 input, bool bigEndian  ) const
{
    char buffer[2] = {0};
    if( bigEndian )
    {
        buffer[1] = ((input & 0xFF00) >> 8);
        buffer[0] = (input & 0x00FF);
    }
    else
    {
        buffer[0] = ((input & 0xFF00) >> 8);
        buffer[1] = (input & 0x00FF);
    }

    device->write(buffer, 2);
    ConnectionProfiler::instance()->addWriteBytes(2);
}

void ClientMessageBase::writeUint32( QIODevice *device, quint32 input, bool bigEndian ) const
{
    char buffer[4] = {0};
    if( bigEndian )
    {
        buffer[3] = ((input & 0xFF000000) >> 24);
        buffer[2] = ((input & 0x00FF0000) >> 16);
        buffer[1] = ((input & 0x0000FF00) >> 8);
        buffer[0] = (input & 0x000000FF);
    }
    else
    {
        buffer[0] = ((input & 0xFF000000) >> 24);
        buffer[1] = ((input & 0x00FF0000) >> 16);
        buffer[2] = ((input & 0x0000FF00) >> 8);
        buffer[3] = (input & 0x000000FF);
    }

    device->write(buffer, 4);
    ConnectionProfiler::instance()->addWriteBytes(4);

}

