src/proto2/NetworkPacket.hh
author saiam
Fri, 28 Nov 2008 22:26:23 +0000
changeset 128 890ac82cdcc0
parent 89 825c4613e087
permissions -rw-r--r--
Documenting more, cleaning variables. This code needs some serious
rewriting. (And we havent too many features either)
89
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     1
#ifndef NETWORK_PACKET_HH
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     2
#define NETWORK_PACKET_HH
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     3
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     4
#include "NetworkConfig.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     5
#include "Vector.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     6
#include "Error.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     7
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     8
class NetworkPacketError : public Error {
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     9
    public:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    10
        NetworkPacketError (const std::string &message) : Error(message) { }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    11
};
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    12
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    13
class NetworkPacket {
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    14
    private:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    15
        char buf[NETWORK_PACKET_SIZE];
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    16
        size_t buf_size, data_size, offset;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    17
        
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    18
        void check_write_size (size_t item_size);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    19
        void check_read_size (size_t item_size);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    20
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    21
        template <typename T> T read_val (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    22
        template <typename T> void write_val (const T &val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    23
 
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    24
    public:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    25
        NetworkPacket (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    26
        
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    27
        char* get_buf (void) { return buf; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    28
        const char* get_buf (void) const { return buf; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    29
        size_t get_data_size (void) const { return data_size; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    30
        size_t get_buf_size (void) const { return buf_size; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    31
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    32
        void set_data_size (size_t size) { offset = 0; data_size = size; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    33
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    34
        // raw
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    35
        void write (const void *ptr, size_t len);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    36
        void read (void *ptr, size_t len);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    37
       
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    38
        // type-reads, handle network-endianlness
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    39
        uint32_t read_uint32 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    40
        uint16_t read_uint16 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    41
        uint8_t read_uint8 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    42
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    43
        int32_t read_int32 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    44
        int16_t read_int16 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    45
        int8_t read_int8 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    46
        
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    47
        float read_float32 (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    48
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    49
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    50
        void write_uint32 (uint32_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    51
        void write_uint16 (uint16_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    52
        void write_uint8 (uint8_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    53
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    54
        void write_int32 (int32_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    55
        void write_int16 (int16_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    56
        void write_int8 (int8_t val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    57
        
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    58
        void write_float32 (float val);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    59
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    60
        // complex
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    61
        Vector read_vector (void);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    62
        void write_vector (const Vector &vec);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    63
        void write_packet (const NetworkPacket &pkt);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    64
};
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    65
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    66
#endif /* NETWORK_PACKET_HH */