test.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include "json.h"
  5. #include "arraylist.h"
  6. #include "server.h"
  7. #include "error.h"
  8. #include "bomberstudent_server.h"
  9. #include "client.h"
  10. #include "file.h"
  11. #include "game.h"
  12. /* --- Extern --- */
  13. extern Error error;
  14. int parse(){
  15. char str[200];
  16. char* key = NULL;
  17. char* val = NULL;
  18. JsonParser json;
  19. strcpy(str, "{\"name\" : \"Jack\", \"age\": 27, \"test\": true, \"tab\": [1, 2, 3, 4, 5], \"obj\": {\"name\" : \"Jack\", \"age\": 27}, \"nb\": 27.8 }");
  20. //Parse
  21. int a = json_parse(&json, str);
  22. printf("Parse : %d\n", a);
  23. //Affiche toutes les clefs : valeurs
  24. for(int i = 0; i < json.elt; i++){
  25. key = key_index(&json, i);
  26. val = get_index(&json, i);
  27. printf("%s : %s\n", key, val);
  28. }
  29. //Recup un nombre
  30. printf("Double : %f %.2f | Int : %d %d\n", get_number(&json, "age"), get_number(&json, "nb"), get_integer(&json, "age"), get_integer(&json, "nb"));
  31. //Recup boolean
  32. printf("Bool : %d %d\n", get_boolean(&json, "test"), get_boolean(&json, "tab"));
  33. //Recup obj
  34. JsonParser* js;
  35. js = get_object(&json, "obj");
  36. if(js != NULL){
  37. int key_i = get_pos(js, "name");
  38. printf("JSON : %s %s, age %d\n", key_index(js, key_i), get_value(js, "name"), get_integer(js, "age"));
  39. } else {
  40. printf("JSON : Error");
  41. }
  42. //Supprime
  43. free(key);
  44. free(val);
  45. clean_json_parser(&json);
  46. return 0;
  47. }
  48. int encode(){
  49. //Encode
  50. JsonEncoder json;
  51. ini_encoder(&json);
  52. add_string(&json, "name", "robert");
  53. add_number(&json, "nb", 25.698, 2);
  54. add_integer(&json, "int", 846);
  55. add_string(&json, "aze", "rty");
  56. add_boolean(&json, "bool", false);
  57. add_value(&json, "\"test\": \"aze\nrty\"");
  58. printf("Json\n");
  59. printf("%s\n", json_encode(&json));
  60. //Encode un JsonEncoder
  61. JsonEncoder json2;
  62. ini_encoder(&json2);
  63. add_integer(&json2, "vie", 42);
  64. add_object(&json2, "obj", &json);
  65. printf("\nJson 2\n");
  66. printf("%s\n", json_encode(&json2));
  67. //Decode
  68. JsonParser parser, *parser2;
  69. char* key, *val;
  70. json_parse(&parser, json_encode(&json2));
  71. //Affiche toutes les clefs : valeurs
  72. printf("\nParser\n");
  73. for(int i = 0; i < parser.elt; i++){
  74. key = key_index(&parser, i);
  75. val = get_index(&parser, i);
  76. printf("%s : %s\n", key, val);
  77. }
  78. //Lecture du sous json
  79. parser2 = get_object(&parser, "obj");
  80. //Affiche toutes les clefs : valeurs
  81. printf("\nParser 2\n");
  82. for(int i = 0; i < parser2->elt; i++){
  83. key = key_index(parser2, i);
  84. val = get_index(parser2, i);
  85. printf("%s : %s\n", key, val);
  86. }
  87. //Clean
  88. clean_json_encoder(&json);
  89. clean_json_encoder(&json2);
  90. clean_json_parser(&parser);
  91. return 0;
  92. }
  93. int serv(){
  94. char str[BUFFER_SIZE];
  95. Server s = server_create_tcp();
  96. s->server_bind(s, 8080);
  97. s->server_accept(s);
  98. s->server_receive(s, str, BUFFER_SIZE);
  99. printf("%s\n", str);
  100. server_close_client(s);
  101. server_close(s);
  102. s = server_create_udp();
  103. s->server_bind(s, 8080);
  104. s->server_receive(s, str, BUFFER_SIZE);
  105. printf("%s\n", str);
  106. server_close(s);
  107. return 0;
  108. }
  109. int serv_udp(){
  110. char str[BUFFER_SIZE];
  111. Server s = server_create_udp();
  112. s->server_bind(s, 18624);
  113. s->server_receive(s, str, BUFFER_SIZE);
  114. s->server_send(s, "i'm a bomberstudent server");
  115. printf("%s\n", str);
  116. server_close(s);
  117. return 0;
  118. }
  119. int serv_tcp(){
  120. char str[BUFFER_SIZE];
  121. Server s = server_create_tcp();
  122. s->server_bind(s, 18642);
  123. s->server_accept(s);
  124. s->server_receive(s, str, BUFFER_SIZE);
  125. printf("%s\n", str);
  126. s->server_send(s, "Hello");
  127. server_close_client(s);
  128. server_close(s);
  129. return 0;
  130. }
  131. int handler(int cliId, JsonParser* jp){
  132. printf("Handler : %d - %s\n", cliId, get_value(jp, "key"));
  133. JsonEncoder je;
  134. ini_encoder(&je);
  135. add_integer(&je, "code", 200);
  136. add_string(&je, "etat", "ok");
  137. send_client(cliId, &je);
  138. return 1;
  139. }
  140. void notify(){
  141. Client* cli = get_client(0);
  142. JsonEncoder je;
  143. ini_encoder(&je);
  144. add_string(&je, "etat", "ok");
  145. add_integer(&je, "value", 42);
  146. notify_client(cli, "POST", "test", &je);
  147. }
  148. int files(){
  149. char** result = NULL, * content = NULL;
  150. char path[500];
  151. int length;
  152. result = file_list("map", &length);
  153. if(length == ERR){
  154. return 0;
  155. }
  156. for(int i = 0; i < length; i++){
  157. printf("Name : %s\n", result[i]);
  158. sprintf(path, "map/%s", result[i]);
  159. content = file_get_content(path);
  160. if(content != NULL){
  161. printf("Content :\n%s\n", content);
  162. free(content);
  163. }
  164. free(result[i]);
  165. }
  166. free(result);
  167. return 1;
  168. }
  169. int array_encode(){
  170. JsonArray ja;
  171. ini_array_encoder(&ja);
  172. add_array_number(&ja, 3, 4.5896);
  173. add_array_string(&ja, "String");
  174. add_array_boolean(&ja, 1);
  175. add_array_array(&ja, &ja);
  176. JsonEncoder je;
  177. ini_encoder(&je);
  178. add_string(&je, "clef", "val");
  179. add_boolean(&je, "bool", 0);
  180. add_object(&je, "self", &je);
  181. add_array_object(&ja, &je);
  182. add_array(&je, "tab", &ja);
  183. printf("%s\n", json_encode(&je));
  184. clean_json_array(&ja);
  185. clean_json_encoder(&je);
  186. return 1;
  187. }
  188. int array_parse(){
  189. // "[4.000, \"String\", true, [4.000, \"String\", true, [1, 2, 3]]"
  190. JsonArray ja;
  191. ini_array_parser(&ja);
  192. int a = json_parse_array(&ja, "[4.000, \"String\", true, [4.000, \"String\", true, [1, 2, 3]], {\"aze\": \"rty\", \"tab\": [1, 2, 3]}]");
  193. printf("Res : %d\n", a);
  194. printf("%f\n", get_array_number(&ja, 0));
  195. printf("%s\n", get_array_string(&ja, 1));
  196. printf("%d\n", get_array_boolean(&ja, 2));
  197. printf("%s\n", get_array_value(&ja, 3));
  198. JsonParser* jp = get_array_object(&ja, 4);
  199. printf("%s\n", get_string(jp, "aze"));
  200. JsonArray* ja2 = get_array(jp, "tab");
  201. printf("%s\n", get_array_value(ja2, 1));
  202. return 1;
  203. }
  204. int size(){
  205. char* content;
  206. int* size;
  207. //char** map;
  208. content = file_get_content("map/map1");
  209. size = map_size(content);
  210. printf("Width : %d\n", size[WIDTH]);
  211. printf("Height : %d\n", size[HEIGHT]);
  212. /*map = parse_map(content, size[WIDTH], size[HEIGHT]);
  213. printf("[1, 2] %c\n", map[1][2]);
  214. for(int i = 0; i < size[HEIGHT]; i++){
  215. for(int j = 0; j < size[WIDTH]; j++){
  216. printf("%c", map[j][i]);
  217. }
  218. printf("\n");
  219. }
  220. for(int i = 0; i < size[WIDTH]; i++){
  221. free(map[i]);
  222. }
  223. free(map);*/
  224. free(content);
  225. free(size);
  226. return 1;
  227. }
  228. /*boolean parse_pos(char* pos, int* x, int* y){
  229. int index = 0;
  230. char* cy, * cx;
  231. while(pos[index] != '\0' && pos[index] != ','){
  232. index++;
  233. }
  234. if(pos[index] == '\0'){
  235. return false;
  236. }
  237. cx = malloc(sizeof(char) * index + 1);
  238. memset(cx, 0, index + 1);
  239. strncpy(cx, pos, index);
  240. cy = pos + index + 1;
  241. *x = atoi(cx);
  242. *y = atoi(cy);
  243. free(cx);
  244. return true;
  245. }*/
  246. int main(){
  247. //return parse();
  248. //return encode();
  249. //return serv();
  250. //return serv_udp();
  251. //return serv_tcp();
  252. /*
  253. error_finit("bomberstudent_server.log");
  254. ini_server();
  255. add_handler("POST", "aze/rty", handler);
  256. if(!launch_udp_server(PORT_UDP)){
  257. error.print("Impossible de démarrer le serveur");
  258. error.exit_err();
  259. }
  260. if(!launch_tcp_server(PORT_TCP)){
  261. error.print("Impossible de démarrer le serveur");
  262. error.exit_err();
  263. }
  264. sleep(10);
  265. notify();
  266. sleep(15);
  267. error.exit();
  268. //*/
  269. //return files();
  270. //return array_encode();
  271. //return array_parse();
  272. //return size();
  273. /*
  274. int x, y;
  275. printf("Res %d\n", parse_pos("5890,84", &x, &y));
  276. printf("%d, %d\n", x, y);
  277. //*/
  278. return 0;
  279. }