#ifndef SERVERMESSAGEBASE_H
#define SERVERMESSAGEBASE_H

#include <QtGlobal>

class QIODevice;
class ServerMessageBase
{

public:
    ServerMessageBase( );

    template<class T>
    static T readMessage( QIODevice *device )
    {
        T result;
        result.loadMessage( device );
        return result;
    }

    virtual bool loadMessage( QIODevice *device ) = 0;

protected:
    void readBytes(  QIODevice *device, char *buffer, int len ) const;
    bool readBool( QIODevice *device ) const;
    quint8 readUint8( QIODevice *device ) const;
    quint16 readUint16( QIODevice *device, bool bigEndian = false ) const;
    quint32 readUint32( QIODevice *device, bool bigEndian = false ) const;
    void reverse(char *buffer, int length) const;

};

class Uint8Reader : public ServerMessageBase
{
public:
    Uint8Reader();
    virtual bool loadMessage( QIODevice *device );
    quint8 value();
private:
    quint8 m_value;

};

#endif // SERVERMESSAGEBASE_H

