Переглянути джерело

Meilleur gestion des parties

Arthur Brandao 6 роки тому
батько
коміт
ee9a999249
3 змінених файлів з 24 додано та 2 видалено
  1. 15 1
      Serveur/game.c
  2. 6 0
      Serveur/game.h
  3. 3 1
      Serveur/main.c

+ 15 - 1
Serveur/game.c

@@ -15,6 +15,12 @@ Game game[MAXGAME];
 int nbGame = 0;
 
 /* --- Fonctions publiques --- */
+void ini_games(){
+    for(int i = 0; i < MAXGAME; i++){
+        game[i].active = false;
+    }
+}
+
 JsonArray* list_map(){
     char** result;
     int nbResult;
@@ -34,6 +40,7 @@ JsonArray* list_map(){
 
 JsonArray* list_game(){
     JsonArray* ja;
+    int compteur = 0, i = 0;
     //Si il n' y a aucune game
     if(nbGame == 0){
         return NULL;
@@ -42,7 +49,11 @@ JsonArray* list_game(){
     ja = malloc(sizeof(JsonArray));
     ini_array_encoder(ja);
     //Ajoute chaque game
-    for(int i = 0; i < nbGame; i++){
+    while(compteur < nbGame && i < MAXGAME){
+        if(!game[i].active){
+            i++;
+            continue;
+        }
         //Creation objet json
         JsonEncoder je;
         ini_encoder(&je);
@@ -53,6 +64,9 @@ JsonArray* list_game(){
         add_array_object(ja, &je);
         //Suppr encoder objet
         clean_json_encoder(&je);
+        //Incremente
+        i++;
+        compteur++;
     }
     return ja;
 }

+ 6 - 0
Serveur/game.h

@@ -19,6 +19,7 @@
 
 /* --- Struct --- */
 typedef struct{
+    boolean active;
     char* name; //Nom
     int nbPlayer; //Nombre de joueur
     char* mapName; //Nom de la map
@@ -33,6 +34,11 @@ extern Game game[MAXGAME];
 extern int nbGame;
 
 /* --- Fonctions --- */
+/**
+ * Initialise les structures des parties
+ */
+void ini_games();
+
 /**
  * Liste le nom de toutes les maps sous forme de JSON
  * @return JsonArray* Les maps existantes

+ 3 - 1
Serveur/main.c

@@ -13,6 +13,7 @@
 #include "bomberstudent_server.h"
 #include "main.h"
 #include "handler.h"
+#include "game.h"
 
 /* --- Extern --- */
 extern Error error;
@@ -54,8 +55,9 @@ int main(){
     //Gestion des signaux
     signal(SIGINT, handler);
     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)
-    //Ajout des handlers
+    //Initialisation des composants
     ini_handler();
+    ini_games();
     //Lance le serveur UDP
     if(!launch_udp_server(PORT_UDP)){
         error.print("Impossible de démarrer le serveur");