added disabling networking when executing command line functionality
[rocksndiamonds.git] / src / init.c
index 88ffc38bfca24941a3a051b2381723b2567f1078..965706fed1c51d46e25e5f60856ef691c318bfe3 100644 (file)
@@ -5051,6 +5051,9 @@ void Execute_Command(char *command)
   {
     Error(ERR_EXIT_HELP, "unrecognized command '%s'", command);
   }
+
+  /* disable networking if any valid command was recognized */
+  options.network = setup.network_mode = FALSE;
 }
 
 static void InitSetup()
@@ -5087,7 +5090,6 @@ static void InitPlayerInfo()
   }
 
   local_player->connected_locally = TRUE;
-  local_player->connected_network = TRUE;
 }
 
 static void InitArtworkInfo()
@@ -5605,22 +5607,39 @@ static void InitArtworkDone()
   InitGlobalAnimations();
 }
 
-void InitNetworkServer()
+void InitNetworkSettings()
 {
-  if (setup.network_mode)
-    options.network = TRUE;
+  InitNetworkInfo(options.network || setup.network_mode,
+                 FALSE,
+                 options.serveronly,
+                 options.server_host,
+                 options.server_port);
+}
 
-  if (!options.network)
+void InitNetworkServer()
+{
+  if (!network.enabled || network.connected)
     return;
 
-#if defined(NETWORK_AVALIABLE)
-  if (!ConnectToServer(options.server_host, options.server_port))
-    Error(ERR_EXIT, "cannot connect to network game server");
+  LimitScreenUpdates(FALSE);
 
-  SendToServer_PlayerName(setup.player_name);
-  SendToServer_ProtocolVersion();
-  SendToServer_NrWanted(setup.network_player_nr + 1);
-#endif
+  if (!ConnectToServer(network.server_host, network.server_port))
+  {
+    network.enabled = FALSE;
+
+    setup.network_mode = FALSE;
+  }
+  else
+  {
+    SendToServer_PlayerName(setup.player_name);
+    SendToServer_ProtocolVersion();
+    SendToServer_NrWanted(setup.network_player_nr + 1);
+
+    network.connected = TRUE;
+  }
+
+  /* short time to recognize result of network initialization */
+  Delay_WithScreenUpdates(1000);
 }
 
 static boolean CheckArtworkConfigForCustomElements(char *filename)
@@ -5993,10 +6012,12 @@ void OpenAll()
   if (options.execute_command)
     Execute_Command(options.execute_command);
 
-  if (options.serveronly)
+  InitNetworkSettings();
+
+  if (network.serveronly)
   {
 #if defined(PLATFORM_UNIX)
-    NetworkServer(options.server_port, options.serveronly);
+    NetworkServer(network.server_port, TRUE);
 #else
     Error(ERR_WARN, "networking only supported in Unix version");
 #endif
@@ -6081,6 +6102,8 @@ void OpenAll()
     return;
   }
 
+  InitNetworkServer();
+
   SetGameStatus(GAME_MODE_MAIN);
 
   FadeSetEnterScreen();
@@ -6093,8 +6116,6 @@ void OpenAll()
 
   DrawMainMenu();
 
-  InitNetworkServer();
-
 #if 0
   Error(ERR_DEBUG, "::: SDL_GetBasePath() == '%s'",
        SDL_GetBasePath());