浏览代码

Amélioration join

Arthur Brandao 6 年之前
父节点
当前提交
f241000932
共有 5 个文件被更改,包括 33 次插入4 次删除
  1. 16 2
      Serveur/game.c
  2. 1 1
      Serveur/game.h
  3. 1 1
      Serveur/handler.c
  4. 13 0
      Serveur/player.c
  5. 2 0
      Serveur/player.h

+ 16 - 2
Serveur/game.c

@@ -196,10 +196,12 @@ JsonEncoder* describe_game(Game* g, int playerIndex){
     JsonEncoder* player;
     JsonEncoder* desc = malloc(sizeof(JsonEncoder));
     JsonEncoder* map = malloc(sizeof(JsonEncoder));
+    JsonArray* players = malloc(sizeof(JsonArray));
     char* content;
     //Initialisation
     ini_encoder(desc);
     ini_encoder(map);
+    ini_array_encoder(players);
     //Info map
     content = remove_char(g->mapContent, '\n'); //La map sans \n car interdit en JSON
     add_integer(map, "width", g->width);
@@ -209,6 +211,18 @@ JsonEncoder* describe_game(Game* g, int playerIndex){
     //Ajout info
     add_integer(desc, "nbPlayers", g->nbPlayer);
     add_object(desc, "map", map);
+    //Ajout info courte joueur
+    //printf("Add players\n");
+    for(int i = 0; i < MAXPLAYER; i++){
+        if(g->player[i]->ini){
+            player = describe_short_player(g->player[i]);
+            add_array_object(players, player);
+            clean_json_encoder(player);
+            free(player);
+        }
+    }
+    //printf("Fin Add players\n");
+    add_array(desc, "players", players);
     //Si besoins ajout un joueur
     if(playerIndex >= 0 && playerIndex < MAXPLAYER && g->player[playerIndex]->ini){
         player = describe_player(g->player[playerIndex]);
@@ -222,7 +236,7 @@ JsonEncoder* describe_game(Game* g, int playerIndex){
     return desc;
 }
 
-boolean notify_player(Game* g, char* method, char* ressource, JsonEncoder* param){
+boolean notify_player(Game* g, char* method, char* ressource, JsonEncoder* param, int excludePlayerId){
     boolean res = true;
     //Regarde si la game est active
     if(!g->active){
@@ -231,7 +245,7 @@ boolean notify_player(Game* g, char* method, char* ressource, JsonEncoder* param
     //Parcours les joeurs de la game
     for(int i = 0; i < MAXPLAYER; i++){
         //Si joueur actif
-        if(g->player[i]->ini){
+        if(g->player[i]->ini && g->player[i]->id != excludePlayerId){
             res = res && notify_client(g->player[i]->cli, method, ressource, param);
         }
     }

+ 1 - 1
Serveur/game.h

@@ -65,7 +65,7 @@ int add_player(Game*, int);
 
 JsonEncoder* describe_game(Game*, int);
 
-boolean notify_player(Game*, char*, char*, JsonEncoder*);
+boolean notify_player(Game*, char*, char*, JsonEncoder*, int);
 
 void stop_game(Game*);
 

+ 1 - 1
Serveur/handler.c

@@ -268,7 +268,7 @@ int handler_game_join(int cliId, JsonParser* json){
     ini_encoder(reponse);
     add_integer(reponse, "id", cliId);
     add_string(reponse, "pos", "0,0");
-    notify_player(&game[index], "POST", "game/newplayer", reponse);
+    notify_player(&game[index], "POST", "game/newplayer", reponse, cliId);
     //Nettoyage
     clean_json_encoder(reponse);
     free(reponse);

+ 13 - 0
Serveur/player.c

@@ -92,6 +92,19 @@ JsonEncoder* describe_player(Player* p){
     return desc;
 }
 
+JsonEncoder* describe_short_player(Player* p){
+    char pos[40];
+    JsonEncoder* desc = malloc(sizeof(JsonEncoder));
+    //Creation chaine
+    memset(pos, 0, 40);
+    snprintf(pos, 40, "%d,%d", p->x, p->y);
+    //Creation JSON
+    ini_encoder(desc);
+    add_integer(desc, "id", p->id);
+    add_string(desc, "pos", pos);
+    return desc;
+}
+
 void delete_player(Player* p){
     p->cli = NULL;
     p->ini = false;

+ 2 - 0
Serveur/player.h

@@ -49,6 +49,8 @@ void create_player(Player*, Client*);
 
 JsonEncoder* describe_player(Player*);
 
+JsonEncoder* describe_short_player(Player*);
+
 /**
  * Supprime un joueur
  * @param Player* La structure à supprimer