messages.cpp 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. #include <cstdio>
  2. #include "Vector3.h"
  3. #include "OS.h"
  4. #include "NetAddress.h"
  5. #include "BitMessage.h"
  6. #include "HeapAllocator.h"
  7. using namespace crown;
  8. void test_int8()
  9. {
  10. uint32_t bits_written;
  11. uint32_t rem_write_bits;
  12. uint32_t bits_read;
  13. uint32_t rem_read_bits;
  14. HeapAllocator allocator;
  15. network::BitMessage m = network::BitMessage(allocator);
  16. int8_t res;
  17. m.init(4);
  18. m.begin_writing();
  19. m.write_int8(-56);
  20. bits_written = m.get_num_bits_written();
  21. rem_write_bits = m.get_remaining_write_bits();
  22. res = m.read_int8();
  23. bits_read = m.get_num_bits_read();
  24. rem_read_bits = m.get_remaining_read_bits();
  25. printf("\n-----------------------------\n");
  26. printf("start write and read for UINT8\n");
  27. printf("value = %d\n", res);
  28. printf("bits written = %d\n", bits_written);
  29. printf("remaining write bits = %d\n", rem_write_bits);
  30. printf("bits read = %d\n", bits_read);
  31. printf("remaining read bits = %d\n", rem_read_bits);
  32. printf("-----------------------------\n");
  33. printf("\n");
  34. }
  35. void test_uint8()
  36. {
  37. uint32_t bits_written;
  38. uint32_t rem_write_bits;
  39. uint32_t bits_read;
  40. uint32_t rem_read_bits;
  41. HeapAllocator allocator;
  42. network::BitMessage m = network::BitMessage(allocator);
  43. uint8_t res;
  44. m.init(4);
  45. m.begin_writing();
  46. m.write_uint8(255);
  47. bits_written = m.get_num_bits_written();
  48. rem_write_bits = m.get_remaining_write_bits();
  49. m.begin_reading();
  50. res = m.read_uint8();
  51. bits_read = m.get_num_bits_read();
  52. rem_read_bits = m.get_remaining_read_bits();
  53. printf("\n-----------------------------\n");
  54. printf("start write and read for UINT8\n");
  55. printf("value = %d\n", res);
  56. printf("bits written = %d\n", bits_written);
  57. printf("remaining write bits = %d\n", rem_write_bits);
  58. printf("bits read = %d\n", bits_read);
  59. printf("remaining read bits = %d\n", rem_read_bits);
  60. printf("-----------------------------\n");
  61. printf("\n");
  62. }
  63. void test_int16()
  64. {
  65. uint32_t bits_written;
  66. uint32_t rem_write_bits;
  67. uint32_t bits_read;
  68. uint32_t rem_read_bits;
  69. HeapAllocator allocator;
  70. network::BitMessage m = network::BitMessage(allocator);
  71. int16_t res;
  72. m.init(4);
  73. m.write_int16(-5555);
  74. bits_written = m.get_num_bits_written();
  75. rem_write_bits = m.get_remaining_write_bits();
  76. res = m.read_int16();
  77. bits_read = m.get_num_bits_read();
  78. rem_read_bits = m.get_remaining_read_bits();
  79. printf("-----------------------------\n");
  80. printf("start write and read for INT16\n");
  81. printf("value = %d\n", res);
  82. printf("bits written = %d\n", bits_written);
  83. printf("remaining write bits = %d\n", rem_write_bits);
  84. printf("bits read = %d\n", bits_read);
  85. printf("remaining read bits = %d\n", rem_read_bits);
  86. printf("-----------------------------\n");
  87. printf("\n");
  88. }
  89. void test_uint16()
  90. {
  91. uint32_t bits_written;
  92. uint32_t rem_write_bits;
  93. uint32_t bits_read;
  94. uint32_t rem_read_bits;
  95. HeapAllocator allocator;
  96. network::BitMessage m = network::BitMessage(allocator);
  97. uint16_t res;
  98. m.init(4);
  99. m.write_uint16(5555);
  100. bits_written = m.get_num_bits_written();
  101. rem_write_bits = m.get_remaining_write_bits();
  102. res = m.read_uint16();
  103. bits_read = m.get_num_bits_read();
  104. rem_read_bits = m.get_remaining_read_bits();
  105. printf("-----------------------------\n");
  106. printf("start write and read for UINT16\n");
  107. printf("value = %d\n", res);
  108. printf("bits written = %d\n", bits_written);
  109. printf("remaining write bits = %d\n", rem_write_bits);
  110. printf("bits read = %d\n", bits_read);
  111. printf("remaining read bits = %d\n", rem_read_bits);
  112. printf("-----------------------------\n");
  113. printf("\n");
  114. }
  115. void test_int32()
  116. {
  117. uint32_t bits_written;
  118. uint32_t rem_write_bits;
  119. uint32_t bits_read;
  120. uint32_t rem_read_bits;
  121. HeapAllocator allocator;
  122. network::BitMessage m = network::BitMessage(allocator);
  123. int32_t res;
  124. m.init(4);
  125. m.write_int32(4000000000);
  126. bits_written = m.get_num_bits_written();
  127. rem_write_bits = m.get_remaining_write_bits();
  128. res = m.read_int32();
  129. bits_read = m.get_num_bits_read();
  130. rem_read_bits = m.get_remaining_read_bits();
  131. printf("-----------------------------\n");
  132. printf("start write and read for INT32\n");
  133. printf("value = %d\n", res);
  134. printf("bits written = %d\n", bits_written);
  135. printf("remaining write bits = %d\n", rem_write_bits);
  136. printf("bits read = %d\n", bits_read);
  137. printf("remaining read bits = %d\n", rem_read_bits);
  138. printf("-----------------------------\n");
  139. printf("\n");
  140. }
  141. void test_float()
  142. {
  143. uint32_t bits_written;
  144. uint32_t rem_write_bits;
  145. uint32_t bits_read;
  146. uint32_t rem_read_bits;
  147. HeapAllocator allocator;
  148. network::BitMessage m = network::BitMessage(allocator);
  149. float res;
  150. m.init(4);
  151. m.write_float(4.5342f);
  152. bits_written = m.get_num_bits_written();
  153. rem_write_bits = m.get_remaining_write_bits();
  154. res = m.read_float();
  155. bits_read = m.get_num_bits_read();
  156. rem_read_bits = m.get_remaining_read_bits();
  157. printf("-----------------------------\n");
  158. printf("start write and read for float\n");
  159. printf("value = %f\n", res);
  160. printf("bits written = %d\n", bits_written);
  161. printf("remaining write bits = %d\n", rem_write_bits);
  162. printf("bits read = %d\n", bits_read);
  163. printf("remaining read bits = %d\n", rem_read_bits);
  164. printf("-----------------------------\n");
  165. printf("\n");
  166. }
  167. void test_vec3()
  168. {
  169. uint32_t bits_written;
  170. uint32_t rem_write_bits;
  171. uint32_t bits_read;
  172. uint32_t rem_read_bits;
  173. HeapAllocator allocator;
  174. network::BitMessage m = network::BitMessage(allocator);
  175. Vector3 v(0.525f, 0.432f, 0.234f);
  176. Vector3 res;
  177. m.init(12);
  178. m.write_vec3(v);
  179. bits_written = m.get_num_bits_written();
  180. rem_write_bits = m.get_remaining_write_bits();
  181. res = m.read_vec3();
  182. bits_read = m.get_num_bits_read();
  183. rem_read_bits = m.get_remaining_read_bits();
  184. printf("-----------------------------\n");
  185. printf("start write and read for VEC_3\n");
  186. printf("x = %f, y = %f, z = %f\n", res.x, res.y, res.z);
  187. printf("bits written = %d\n", bits_written);
  188. printf("remaining write bits = %d\n", rem_write_bits);
  189. printf("bits read = %d\n", bits_read);
  190. printf("remaining read bits = %d\n", rem_read_bits);
  191. printf("-----------------------------\n");
  192. printf("\n");
  193. }
  194. void test_string()
  195. {
  196. uint32_t bits_written;
  197. uint32_t rem_write_bits;
  198. uint32_t bits_read;
  199. uint32_t rem_read_bits;
  200. HeapAllocator allocator;
  201. network::BitMessage m = network::BitMessage(allocator);
  202. uint8_t tmp[16];
  203. char res[16];
  204. char s[] = "test";
  205. m.init(16);
  206. m.write_string(s, sizeof(s), true);
  207. bits_written = m.get_num_bits_written();
  208. rem_write_bits = m.get_remaining_write_bits();
  209. m.read_string(res, 6);
  210. bits_read = m.get_num_bits_read();
  211. rem_read_bits = m.get_remaining_read_bits();
  212. printf("-----------------------------\n");
  213. printf("start write and read for STRING\n");
  214. printf("string = %s\n", res);
  215. printf("sizeof string= %d\n", sizeof(s));
  216. printf("bits written = %d\n", bits_written);
  217. printf("remaining write bits = %d\n", rem_write_bits);
  218. printf("bits read = %d\n", bits_read);
  219. printf("remaining read bits = %d\n", rem_read_bits);
  220. printf("-----------------------------\n");
  221. printf("\n");
  222. }
  223. void test_data()
  224. {
  225. uint32_t bits_written;
  226. uint32_t rem_write_bits;
  227. uint32_t bits_read;
  228. uint32_t rem_read_bits;
  229. HeapAllocator allocator;
  230. network::BitMessage m = network::BitMessage(allocator);
  231. uint8_t tmp[] = "test generic";
  232. uint8_t res[16];
  233. m.init(16);
  234. m.write_data(tmp, 16);
  235. bits_written = m.get_num_bits_written();
  236. rem_write_bits = m.get_remaining_write_bits();
  237. m.read_data(res, 16);
  238. bits_read = m.get_num_bits_read();
  239. rem_read_bits = m.get_remaining_read_bits();
  240. printf("-----------------------------\n");
  241. printf("start write and read for GENERIC\n");
  242. printf("string = %s\n", res);
  243. printf("bits written = %d\n", bits_written);
  244. printf("remaining write bits = %d\n", rem_write_bits);
  245. printf("bits read = %d\n", bits_read);
  246. printf("remaining read bits = %d\n", rem_read_bits);
  247. printf("-----------------------------\n");
  248. printf("\n");
  249. }
  250. void test_net_address()
  251. {
  252. uint32_t bits_written;
  253. uint32_t rem_write_bits;
  254. uint32_t bits_read;
  255. uint32_t rem_read_bits;
  256. HeapAllocator allocator;
  257. network::BitMessage m = network::BitMessage(allocator);
  258. uint8_t tmp[16];
  259. os::NetAddress addr;
  260. os::NetAddress res;
  261. addr.set(192, 168, 0, 1, 80);
  262. m.init(16);
  263. m.write_netaddr(addr);
  264. bits_written = m.get_num_bits_written();
  265. rem_write_bits = m.get_remaining_write_bits();
  266. m.read_netaddr(&res);
  267. bits_read = m.get_num_bits_read();
  268. rem_read_bits = m.get_remaining_read_bits();
  269. printf("-----------------------------\n");
  270. printf("start write and read for NET_ADDRESS\n");
  271. printf("a = %d, b = %d, c = %d, d = %d, p = %d\n", res.m_address[0], res.m_address[1], res.m_address[2], res.m_address[3], res.m_port);
  272. printf("bits written = %d\n", bits_written);
  273. printf("remaining write bits = %d\n", rem_write_bits);
  274. printf("bits read = %d\n", bits_read);
  275. printf("remaining read bits = %d\n", rem_read_bits);
  276. printf("-----------------------------\n");
  277. printf("\n");
  278. }
  279. int main()
  280. {
  281. /*
  282. test_int8();
  283. test_uint8();
  284. test_int16();
  285. test_uint16();
  286. test_int32();
  287. test_float();
  288. test_vec3();
  289. test_string();
  290. test_data();
  291. test_net_address();
  292. */
  293. HeapAllocator allocator;
  294. network::BitMessage msg = network::BitMessage(allocator);
  295. uint32_t protocol_id = 0xFFFFFFFF;
  296. uint16_t sequence = 12345;
  297. uint16_t ack = 12344;
  298. uint32_t ack_bits = 1234543;
  299. msg.init(6);
  300. msg.set_header(protocol_id, sequence, ack, ack_bits);
  301. msg.begin_writing();
  302. msg.write_string("prova", 6);
  303. msg.begin_reading();
  304. uint8_t* header = msg.get_header();
  305. char data[6];
  306. msg.read_string(data, 6);
  307. uint32_t tmp1 = header[0] << 24 | header[1] << 16 | header[2] << 8 | header[3];
  308. uint16_t tmp2 = header[4] << 8 | header[5];
  309. uint16_t tmp3 = header[6] << 8 | header[7];
  310. uint32_t tmp4 = header[8] << 24 | header[9] << 16 | header[10] << 8 | header[11];
  311. os::printf("protocol_id: %d\n", tmp1);
  312. os::printf("sequence: %d\n", tmp2);
  313. os::printf("ack: %d\n", tmp3);
  314. os::printf("ack_bits: %d\n", tmp4);
  315. os::printf("data: %s\n", data);
  316. os::printf("\n");
  317. return 0;
  318. }