src/proto2/NetworkPacket.hh
author terom
Thu, 20 Nov 2008 19:25:56 +0000
branchno-netsession
changeset 36 785d220fc6b7
parent 33 e53f09b378f4
child 40 4b2867fb5c12
permissions -rw-r--r--
...
#ifndef NETWORK_PACKET_HH
#define NETWORK_PACKET_HH

#include "NetworkConfig.hh"
#include "Vector.hh"
#include "Error.hh"

class NetworkPacketError : public Error {
    public:
        NetworkPacketError (const std::string &message) : Error(message) { }
};

class NetworkPacket {
    private:
        char buf[NETWORK_PACKET_SIZE];
        size_t buf_size, data_size, offset;
        
        void check_write_size (size_t item_size);
        void check_read_size (size_t item_size);

        template <typename T> T read_val (void);
        template <typename T> void write_val (const T &val);
 
    public:
        NetworkPacket (void);
        
        char* get_buf (void) { return buf; }
        const char* get_buf (void) const { return buf; }
        size_t get_data_size (void) const { return data_size; }
        size_t get_buf_size (void) const { return buf_size; }

        void set_data_size (size_t size) { offset = 0; data_size = size; }
       
        // type-reads, handle network-endianlness
        uint32_t read_uint32 (void);
        uint16_t read_uint16 (void);
        uint8_t read_uint8 (void);

        int32_t read_int32 (void);
        int16_t read_int16 (void);
        int8_t read_int8 (void);
        
        float read_float32 (void);

        Vector read_vector (void);

        void write_uint32 (uint32_t val);
        void write_uint16 (uint16_t val);
        void write_uint8 (uint8_t val);

        void write_int32 (int32_t val);
        void write_int16 (int16_t val);
        void write_int8 (int8_t val);
        
        void write_float32 (float val);

        void write_vector (const Vector &vec);
        void write_packet (const NetworkPacket &pkt);
};

#endif /* NETWORK_PACKET_HH */