main.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. #include "game.h"
  16. /* --- Extern --- */
  17. extern Error error;
  18. /* --- Global --- */
  19. boolean stop = false;
  20. /* --- Fonctions privées --- */
  21. void handler(int sig){
  22. //Remet le handler
  23. signal(sig, handler);
  24. //Si SIGINT
  25. if(sig == SIGINT){
  26. printf("\nArret du serveur\n");
  27. stop = true;
  28. //Avertit les clients
  29. printf("Notifie les clients de l'arret du serveur\n");
  30. notify_close(END_USER);
  31. clean_clientlist();
  32. //Stop les parties
  33. clean_games();
  34. }
  35. }
  36. /* --- Fonctions publiques --- */
  37. void notify_close(int code){
  38. char codestr[3];
  39. memset(codestr, 0, 3);
  40. sprintf(codestr, "%d", code);
  41. //Encode la reponse
  42. JsonEncoder je;
  43. ini_encoder(&je);
  44. add_string(&je, "status", codestr);
  45. add_string(&je, "message", "Server close");
  46. //Avertit tous les clients
  47. notify_all("POST", "server/end", &je);
  48. }
  49. int main(){
  50. //Lancement gestion d'erreur
  51. error_finit("bomberstudent_server.log");
  52. //Inialise le serveur
  53. ini_server();
  54. //Gestion des signaux
  55. signal(SIGINT, handler);
  56. 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)
  57. //Initialisation des composants
  58. ini_handler();
  59. if(!ini_games()){
  60. error.print("Impossible d'initialiser le serveur");
  61. error.exit_err();
  62. }
  63. //Lance le serveur UDP
  64. printf("Lancement serveur UDP\n");
  65. if(!launch_udp_server(PORT_UDP)){
  66. error.print("Impossible de démarrer le serveur");
  67. error.exit_err();
  68. }
  69. //Lance les seerveurs TCP
  70. printf("Lancement serveurs TCP\n");
  71. if(!launch_tcp_server(PORT_TCP)){
  72. error.print("Impossible de démarrer le serveur");
  73. error.exit_err();
  74. }
  75. //Attend la fin du programme
  76. printf("Serveur Bomberstudent actif\n");
  77. while(!stop){
  78. pause();
  79. }
  80. printf("Fin de l'execution\n");
  81. error.end();
  82. return EXIT_SUCCESS;
  83. }