src/proto2/NetworkPacket.cc
branchno-netsession
changeset 36 785d220fc6b7
parent 33 e53f09b378f4
child 37 ed2957490bbf
equal deleted inserted replaced
35:e21cfda0edde 36:785d220fc6b7
     8     // nothing
     8     // nothing
     9 }
     9 }
    10 
    10 
    11 void NetworkPacket::check_write_size (size_t item_size) {
    11 void NetworkPacket::check_write_size (size_t item_size) {
    12      if (offset + item_size > buf_size)
    12      if (offset + item_size > buf_size)
    13         throw CL_Error("not enough space to write");
    13         throw NetworkPacketError("not enough space to write");
    14 
    14 
    15 }
    15 }
    16         
    16         
    17 void NetworkPacket::check_read_size (size_t item_size) {
    17 void NetworkPacket::check_read_size (size_t item_size) {
    18     if (offset + item_size > data_size)
    18     if (offset + item_size > data_size)
    19         throw CL_Error("not enough data to read");
    19         throw NetworkPacketError("not enough data to read");
    20 }
    20 }
    21 
    21 
    22 template <typename T> T NetworkPacket::read_val (void) {
    22 template <typename T> T NetworkPacket::read_val (void) {
    23     T val;
    23     T val;
    24 
    24 
    45     // update offset and size
    45     // update offset and size
    46     offset += sizeof(T);
    46     offset += sizeof(T);
    47     data_size += sizeof(T);
    47     data_size += sizeof(T);
    48 }
    48 }
    49 
    49 
    50 uint32_t NetworkPacket::read_uint32 (void) const {
    50 uint32_t NetworkPacket::read_uint32 (void) {
    51     return ntohl(read_val<uint32_t>());
    51     return ntohl(read_val<uint32_t>());
    52 }
    52 }
    53 
    53 
    54 uint16_t NetworkPacket::read_uint16 (void) const {
    54 uint16_t NetworkPacket::read_uint16 (void) {
    55     return ntohs(read_val<uint16_t>());
    55     return ntohs(read_val<uint16_t>());
    56 }
    56 }
    57 
    57 
    58 uint8_t NetworkPacket::read_uint8 (void) const {
    58 uint8_t NetworkPacket::read_uint8 (void) {
    59     return read_val<uint8_t>();
    59     return read_val<uint8_t>();
    60 }
    60 }
    61 
    61 
    62 int32_t NetworkPacket::read_int32 (void) const {
    62 int32_t NetworkPacket::read_int32 (void) {
    63     return ntohl(read_val<int32_t>());
    63     return ntohl(read_val<int32_t>());
    64 }
    64 }
    65 
    65 
    66 int16_t NetworkPacket::read_int16 (void) const {
    66 int16_t NetworkPacket::read_int16 (void) {
    67     return ntohs(read_val<int16_t>());
    67     return ntohs(read_val<int16_t>());
    68 }
    68 }
    69 
    69 
    70 int8_t NetworkPacket::read_int8 (void) const {
    70 int8_t NetworkPacket::read_int8 (void) {
    71     return read_val<int8_t>();
    71     return read_val<int8_t>();
       
    72 }
       
    73         
       
    74 float NetworkPacket::read_float32 (void) {
       
    75     /* XXX */
       
    76 }
       
    77 
       
    78 Vector NetworkPacket::read_vector (void) {
       
    79     float fx = read_float32();
       
    80     float fy = read_float32();
       
    81 
       
    82     return Vector(fx, fy);
    72 }
    83 }
    73 
    84 
    74 void NetworkPacket::write_uint32 (uint32_t val) {
    85 void NetworkPacket::write_uint32 (uint32_t val) {
    75     write_val<uint32_t>(htonl(val));
    86     write_val<uint32_t>(htonl(val));
    76 }
    87 }
    92 }
   103 }
    93 
   104 
    94 void NetworkPacket::write_int8 (int8_t val) {
   105 void NetworkPacket::write_int8 (int8_t val) {
    95     write_val<int8_t>(val);
   106     write_val<int8_t>(val);
    96 }
   107 }
       
   108         
       
   109 void write_float32 (float val) {
       
   110     /* XXX: */
       
   111 }
    97 
   112 
    98 void write_packet (const NetworkPacket &pkt) {
   113 void NetworkPacket::write_vector (const Vector &vec) {
       
   114     write_float32(vec.x);
       
   115     write_float32(vec.y);
       
   116 }
       
   117 
       
   118 void NetworkPacket::write_packet (const NetworkPacket &pkt) {
    99     // check buffer size
   119     // check buffer size
   100     check_write_size(pkt.get_data_size());
   120     check_write_size(pkt.get_data_size());
   101 
   121 
   102     // copy
   122     // copy
   103     memcpy(buf + offset, pkt.get_buf(), pkt.get_data_size());
   123     memcpy(buf + offset, pkt.get_buf(), pkt.get_data_size());
   104 
   124 
   105     // update offset/data_size
   125     // update offset/data_size
   106     offset += pkt.get_data_size();
   126     offset += pkt.get_data_size();
   107     data_size += pkt.get_data_size();
   127     data_size += pkt.get_data_size();
   108 }
   128 }
       
   129