fixed bug with handling networking packets if request dialog is active
authorHolger Schemel <info@artsoft.org>
Fri, 12 Oct 2018 16:04:30 +0000 (18:04 +0200)
committerHolger Schemel <info@artsoft.org>
Fri, 12 Oct 2018 16:04:35 +0000 (18:04 +0200)
Before, it was possible for a network client to start a new game while
another client was still about answering a request dialog (like asking
if a tape for a solved level should be saved), causing synchronization
problems with network packet handling.

With this bugfix, handling network packets is paused during a request.

src/game.c
src/game.h
src/init.c
src/network.c
src/tools.c

index b80d858..c0fa168 100644 (file)
@@ -4196,6 +4196,7 @@ void InitGame(void)
 
   game.restart_level = FALSE;
   game.restart_game_message = NULL;
+  game.request_active = FALSE;
 
   if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
     InitGameActions_MM();
index 947d466..3b79cb5 100644 (file)
@@ -208,6 +208,9 @@ struct GameInfo
   /* trigger message to ask for restarting the game */
   char *restart_game_message;
 
+  /* values for special request dialog control */
+  boolean request_active;
+
   /* values for special game control */
   int centered_player_nr;
   int centered_player_nr_next;
index a765767..2167984 100644 (file)
@@ -5113,6 +5113,7 @@ static void InitGameInfo(void)
 {
   game.restart_level = FALSE;
   game.restart_game_message = NULL;
+  game.request_active = FALSE;
 }
 
 static void InitPlayerInfo(void)
index f67f819..73887cd 100644 (file)
@@ -1049,6 +1049,10 @@ static void HandleNetworkingDisconnect(void)
 
 void HandleNetworking(void)
 {
+  /* do not handle any networking packets if request dialog is active */
+  if (game.request_active)
+    return;
+
   char *error_message = HandleNetworkingPackets();
 
   if (error_message != NULL)
index f89b2b2..e9d11c1 100644 (file)
@@ -4243,6 +4243,8 @@ static int RequestHandleEvents(unsigned int req_state)
   int sx, sy;
   int result;
 
+  game.request_active = TRUE;
+
   setRequestPosition(&sx, &sy, FALSE);
 
   button_status = MB_RELEASED;
@@ -4543,6 +4545,8 @@ static int RequestHandleEvents(unsigned int req_state)
     BackToFront();
   }
 
+  game.request_active = FALSE;
+
   return result;
 }