main.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. /* --- Extern --- */
  11. extern Error error;
  12. int parse(){
  13. char str[200];
  14. char* key = NULL;
  15. char* val = NULL;
  16. JsonParser json;
  17. strcpy(str, "{\"name\" : \"Jack\", \"age\": 27, \"test\": true, \"tab\": [1, 2, 3, 4, 5], \"obj\": {\"name\" : \"Jack\", \"age\": 27}, \"nb\": 27.8 }");
  18. //Parse
  19. int a = json_parse(&json, str);
  20. printf("Parse : %d\n", a);
  21. //Affiche toutes les clefs : valeurs
  22. for(int i = 0; i < json.elt; i++){
  23. key = key_index(&json, i);
  24. val = get_index(&json, i);
  25. printf("%s : %s\n", key, val);
  26. }
  27. //Recup un nombre
  28. printf("Double : %f %.2f | Int : %d %d\n", get_number(&json, "age"), get_number(&json, "nb"), get_integer(&json, "age"), get_integer(&json, "nb"));
  29. //Recup boolean
  30. printf("Bool : %d %d\n", get_boolean(&json, "test"), get_boolean(&json, "tab"));
  31. //Recup obj
  32. JsonParser* js;
  33. js = get_object(&json, "obj");
  34. if(js != NULL){
  35. int key_i = get_pos(js, "name");
  36. printf("JSON : %s %s, age %d\n", key_index(js, key_i), get_value(js, "name"), get_integer(js, "age"));
  37. } else {
  38. printf("JSON : Error");
  39. }
  40. //Supprime
  41. free(key);
  42. free(val);
  43. clean_json_parser(&json);
  44. return 0;
  45. }
  46. int encode(){
  47. //Encode
  48. JsonEncoder json;
  49. ini_encoder(&json);
  50. add_string(&json, "name", "robert");
  51. add_number(&json, "nb", 25.698, 2);
  52. add_integer(&json, "int", 846);
  53. add_string(&json, "aze", "rty");
  54. add_boolean(&json, "bool", false);
  55. add_value(&json, "\"test\": \"aze\nrty\"");
  56. printf("Json\n");
  57. printf("%s\n", json_encode(&json));
  58. //Encode un JsonEncoder
  59. JsonEncoder json2;
  60. ini_encoder(&json2);
  61. add_integer(&json2, "vie", 42);
  62. add_object(&json2, "obj", json);
  63. printf("\nJson 2\n");
  64. printf("%s\n", json_encode(&json2));
  65. //Decode
  66. JsonParser parser, *parser2;
  67. char* key, *val;
  68. json_parse(&parser, json_encode(&json2));
  69. //Affiche toutes les clefs : valeurs
  70. printf("\nParser\n");
  71. for(int i = 0; i < parser.elt; i++){
  72. key = key_index(&parser, i);
  73. val = get_index(&parser, i);
  74. printf("%s : %s\n", key, val);
  75. }
  76. //Lecture du sous json
  77. parser2 = get_object(&parser, "obj");
  78. //Affiche toutes les clefs : valeurs
  79. printf("\nParser 2\n");
  80. for(int i = 0; i < parser2->elt; i++){
  81. key = key_index(parser2, i);
  82. val = get_index(parser2, i);
  83. printf("%s : %s\n", key, val);
  84. }
  85. //Clean
  86. clean_json_encoder(&json);
  87. clean_json_encoder(&json2);
  88. clean_json_parser(&parser);
  89. return 0;
  90. }
  91. int serv(){
  92. char str[BUFFER_SIZE];
  93. Server s = server_create_tcp();
  94. s->server_bind(s, 8080);
  95. s->server_accept(s);
  96. s->server_receive(s, str, BUFFER_SIZE);
  97. printf("%s\n", str);
  98. server_close_client(s);
  99. server_close(s);
  100. s = server_create_udp();
  101. s->server_bind(s, 8080);
  102. s->server_receive(s, str, BUFFER_SIZE);
  103. printf("%s\n", str);
  104. server_close(s);
  105. return 0;
  106. }
  107. int serv_udp(){
  108. char str[BUFFER_SIZE];
  109. Server s = server_create_udp();
  110. s->server_bind(s, 18624);
  111. s->server_receive(s, str, BUFFER_SIZE);
  112. s->server_send(s, "i'm a bomberstudent server");
  113. printf("%s\n", str);
  114. server_close(s);
  115. return 0;
  116. }
  117. int serv_tcp(){
  118. char str[BUFFER_SIZE];
  119. Server s = server_create_tcp();
  120. s->server_bind(s, 18642);
  121. s->server_accept(s);
  122. s->server_receive(s, str, BUFFER_SIZE);
  123. printf("%s\n", str);
  124. s->server_send(s, "Hello");
  125. server_close_client(s);
  126. server_close(s);
  127. return 0;
  128. }
  129. int handler(int cliId, JsonParser* jp){
  130. printf("Handler : %d - %s\n", cliId, get_value(jp, "key"));
  131. JsonEncoder je;
  132. ini_encoder(&je);
  133. add_integer(&je, "code", 200);
  134. add_string(&je, "etat", "ok");
  135. send_client(cliId, &je);
  136. return 1;
  137. }
  138. int main(){
  139. //return parse();
  140. //return encode();
  141. //return serv();
  142. //return serv_udp();
  143. //return serv_tcp();
  144. //*
  145. error_finit("bomberstudent_server.log");
  146. ini_server();
  147. add_handler("POST", "aze/rty", handler);
  148. if(!launch_udp_server(PORT_UDP)){
  149. error.print("Impossible de démarrer le serveur");
  150. error.exit_err();
  151. }
  152. if(!launch_tcp_server(PORT_TCP)){
  153. error.print("Impossible de démarrer le serveur");
  154. error.exit_err();
  155. }
  156. sleep(20);
  157. error.exit();
  158. //*/
  159. }