terom@89: #ifndef NETWORK_PACKET_HH terom@89: #define NETWORK_PACKET_HH terom@89: terom@89: #include "NetworkConfig.hh" terom@89: #include "Vector.hh" terom@89: #include "Error.hh" terom@89: terom@89: class NetworkPacketError : public Error { terom@89: public: terom@89: NetworkPacketError (const std::string &message) : Error(message) { } terom@89: }; terom@89: terom@89: class NetworkPacket { terom@89: private: terom@89: char buf[NETWORK_PACKET_SIZE]; terom@89: size_t buf_size, data_size, offset; terom@89: terom@89: void check_write_size (size_t item_size); terom@89: void check_read_size (size_t item_size); terom@89: terom@89: template T read_val (void); terom@89: template void write_val (const T &val); terom@89: terom@89: public: terom@89: NetworkPacket (void); terom@89: terom@89: char* get_buf (void) { return buf; } terom@89: const char* get_buf (void) const { return buf; } terom@89: size_t get_data_size (void) const { return data_size; } terom@89: size_t get_buf_size (void) const { return buf_size; } terom@89: terom@89: void set_data_size (size_t size) { offset = 0; data_size = size; } terom@89: terom@89: // raw terom@89: void write (const void *ptr, size_t len); terom@89: void read (void *ptr, size_t len); terom@89: terom@89: // type-reads, handle network-endianlness terom@89: uint32_t read_uint32 (void); terom@89: uint16_t read_uint16 (void); terom@89: uint8_t read_uint8 (void); terom@89: terom@89: int32_t read_int32 (void); terom@89: int16_t read_int16 (void); terom@89: int8_t read_int8 (void); terom@89: terom@89: float read_float32 (void); terom@89: terom@89: terom@89: void write_uint32 (uint32_t val); terom@89: void write_uint16 (uint16_t val); terom@89: void write_uint8 (uint8_t val); terom@89: terom@89: void write_int32 (int32_t val); terom@89: void write_int16 (int16_t val); terom@89: void write_int8 (int8_t val); terom@89: terom@89: void write_float32 (float val); terom@89: terom@89: // complex terom@89: Vector read_vector (void); terom@89: void write_vector (const Vector &vec); terom@89: void write_packet (const NetworkPacket &pkt); terom@89: }; terom@89: terom@89: #endif /* NETWORK_PACKET_HH */