Forráskód Böngészése

:bug: Debug deconnexion sauvage + Message d'etat du serveur

Arthur Brandao 6 éve
szülő
commit
33dd163c8b
4 módosított fájl, 25 hozzáadás és 3 törlés
  1. 10 1
      Serveur/bomberstudent_server.c
  2. 1 0
      Serveur/handler.c
  3. 8 2
      Serveur/main.c
  4. 6 0
      Serveur/server_tcp.c

+ 10 - 1
Serveur/bomberstudent_server.c

@@ -59,6 +59,7 @@ void* client_thread(void* data) {
         adderror("Le client n'existe pas");
         return NULL;
     }
+    printf("Connexion du client %d\n", cliId);
     //Attente requete du client
     while (true) {
         if (!receive_client(cli)) {
@@ -70,6 +71,7 @@ void* client_thread(void* data) {
         //Si trop d'erreur d'affilé
         if (nbError == NBERRORRESET) {
             //Fermeture du client et fin du thread
+            printf("Connexion perdu avec le client %d\n", cliId);
             adderror("Client non accessible, fin de la connexion");
             remove_client(cliId);
             break;
@@ -216,6 +218,12 @@ boolean receive_client(Client* cli) {
     arraylist* al = &get;
     //Attente reception
     if (cli->main->server_receive(cli->main, buffer, BUFFER_SIZE) == ERR) {
+        //Si la conneion est coupée
+        if(serrno == SEABORT){
+            //On ferme le client
+            printf("Connexion perdu avec le client %d\n", cli->id);
+            remove_client(cli->id);
+        }
         addserror("Impossible de recevoire les données du client");
         return false;
     }
@@ -299,9 +307,10 @@ boolean send_client(int cliId, JsonEncoder* je){
         //Si la conneion est coupée
         if(serrno == SEABORT){
             //On ferme le client
+            printf("Connexion perdu avec le client %d\n", cliId);
             remove_client(cliId);
         }
-        adderror("Impossible de repondre à la requete du client");
+        addserror("Impossible de repondre à la requete du client");
         free(answer);
         free(msg);
         return false;

+ 1 - 0
Serveur/handler.c

@@ -24,6 +24,7 @@ void ini_handler(){
 }
 
 int handler_client_end(int cliId, JsonParser* json){
+    printf("Deconnexion du client %d\n", cliId);
     remove_client(cliId);
     return SUCCESS;
 }

+ 8 - 2
Serveur/main.c

@@ -23,12 +23,14 @@ boolean stop = false;
 
 /* --- Fonctions privées --- */
 void handler(int sig){
+    //Remet le handler
+    signal(sig, handler);
     //Si SIGINT
     if(sig == SIGINT){
+        printf("\nArret du serveur\n");
         stop = true;
-        //Remet le handler
-        signal(SIGINT, handler);
         //Avertit les clients
+        printf("Notifie les clients de l'arret du serveur\n");
         notify_close(END_USER);
     }
 }
@@ -59,19 +61,23 @@ int main(){
     ini_handler();
     ini_games();
     //Lance le serveur UDP
+    printf("Lancement serveur UDP\n");
     if(!launch_udp_server(PORT_UDP)){
         error.print("Impossible de démarrer le serveur");
         error.exit_err();
     }
     //Lance les seerveurs TCP
+    printf("Lancement serveurs TCP\n");
     if(!launch_tcp_server(PORT_TCP)){
         error.print("Impossible de démarrer le serveur");
         error.exit_err();
     }
     //Attend la fin du programme
+    printf("Serveur Bomberstudent actif\n");
     while(!stop){
         pause();
     } 
+    printf("Fin de l'execution\n");
     error.end();
     return EXIT_SUCCESS;
 }

+ 6 - 0
Serveur/server_tcp.c

@@ -68,6 +68,12 @@ ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
         addperror("Impossible de récupèrer les données");
         return ERR;
     }
+    //Si on continue sans avoir modifier buffer (et donc un read non bloquant) signe d'une deconnexion
+    if(buf[0] == '\0'){
+        serrno = SEABORT;
+        adderror("Aucune données émise par le client");
+        return ERR;
+    }
     return tmp;
 }