bomberstudent_server.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * File: bomberstudent_server.c
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 14 novembre 2018
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <pthread.h>
  10. #include "arraylist.h"
  11. #include "bomberstudent_server.h"
  12. #include "error.h"
  13. /* --- Globale --- */
  14. arraylist get;
  15. arraylist post;
  16. /* --- Fonctions privées --- */
  17. void* udp_thread(void* data){
  18. Server s;
  19. char buffer[BUFFER_SIZE];
  20. //Cast data en serveur
  21. s = (Server) data;
  22. //Detache le thread
  23. if(pthread_detach(pthread_self()) != 0){
  24. return NULL;
  25. }
  26. //Boucle attente
  27. while(true){
  28. //Attente connexion
  29. if(s->server_receive(s, buffer, BUFFER_SIZE) == ERR){
  30. addserror("Impossible de recevoir le demande de recherche");
  31. continue;
  32. }
  33. //Si la phrase est correcte
  34. if(strncmp(buffer, SEARCH_SERV, strlen(buffer)) == 0){
  35. if(!s->server_send(s, "i'm a bomberstudent server")){
  36. addserror("Impossible de repondre à la recherche");
  37. }
  38. }
  39. }
  40. return NULL;
  41. }
  42. /* --- Fonctions publiques --- */
  43. void ini_server(){
  44. arraylist_ini(&get);
  45. arraylist_ini(&post);
  46. }
  47. void add_handler(char* method, char* ressource, int(*handler)(Server, JsonParser*)){
  48. if(strncmp(method, "POST", 5) == 0){
  49. arraylist_add(&post, ressource, handler);
  50. } else if(strncmp(method, "POST", 5) == 0){
  51. arraylist_add(&get, ressource, handler);
  52. }
  53. }
  54. boolean launch_udp_server(int port){
  55. Server s;
  56. boolean res;
  57. pthread_t udp;
  58. //Creation serveur
  59. s = server_create_udp();
  60. res = s->server_bind(s, port);
  61. if(!res){
  62. return false;
  63. }
  64. //Lancement thread serveur udp
  65. if(pthread_create(&udp, NULL, udp_thread, s) != 0){
  66. adderror("Impossible de créer le thread UDP");
  67. server_close(s);
  68. return false;
  69. }
  70. return true;
  71. }
  72. boolean launch_tcp_server(int);
  73. boolean receive_client(Server);
  74. boolean send_client(Server, JsonEncoder*);
  75. boolean notify_client(Server, char*, char*, JsonEncoder*);