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 |