main.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * File: main.c
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 22 novembre 2018
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <unistd.h>
  10. #include <signal.h>
  11. #include "error.h"
  12. #include "bomberstudent_server.h"
  13. #include "main.h"
  14. #include "handler.h"
  15. /* --- Extern --- */
  16. extern Error error;
  17. /* --- Global --- */
  18. boolean stop = false;
  19. /* --- Fonctions privées --- */
  20. void handler(int sig){
  21. //Si SIGINT
  22. if(sig == SIGINT){
  23. stop = true;
  24. //Remet le handler
  25. signal(SIGINT, handler);
  26. //Avertit les clients
  27. notify_close(END_USER);
  28. }
  29. }
  30. /* --- Fonctions publiques --- */
  31. void notify_close(int code){
  32. char codestr[3];
  33. memset(codestr, 0, 3);
  34. sprintf(codestr, "%d", code);
  35. //Encode la reponse
  36. JsonEncoder je;
  37. ini_encoder(&je);
  38. add_string(&je, "statut", codestr);
  39. add_string(&je, "message", "Server close");
  40. //Avertit tous les clients
  41. notify_all("POST", "server/end", &je);
  42. }
  43. int main(){
  44. //Lancement gestion d'erreur
  45. error_finit("bomberstudent_server.log");
  46. //Inialise le serveur
  47. ini_server();
  48. //Gestion des signaux
  49. signal(SIGINT, handler);
  50. signal(SIGPIPE, SIG_IGN); //Ignore les signaux SIGPIPE (on est pas sur d'en recevoir à chaque coupure socket + Impossible de determnier quelle socket est fermé (on laisse la méthode du timeout pour la trouver)
  51. //Ajout des handlers
  52. ini_handler();
  53. //Lance le serveur UDP
  54. if(!launch_udp_server(PORT_UDP)){
  55. error.print("Impossible de démarrer le serveur");
  56. error.exit_err();
  57. }
  58. //Lance les seerveurs TCP
  59. if(!launch_tcp_server(PORT_TCP)){
  60. error.print("Impossible de démarrer le serveur");
  61. error.exit_err();
  62. }
  63. //Attend la fin du programme
  64. while(!stop){
  65. pause();
  66. }
  67. error.end();
  68. return EXIT_SUCCESS;
  69. }