From 56598ce2fff7bd742fe3f9e5654d9cef44708967 Mon Sep 17 00:00:00 2001 From: geckosoft Date: Mon, 1 Nov 2010 03:46:38 +0100 Subject: [PATCH] Fixed: crash when starting a new game after disconnecting from own server --- OpenRA.Game/Game.cs | 3 +++ OpenRA.Game/Server/Server.cs | 14 +++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 721718a546..95fe03914c 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -308,6 +308,9 @@ namespace OpenRA public static void Disconnect() { + if (IsHost) + Server.Server.StopListening(); + orderManager.Dispose(); var shellmap = modData.Manifest.ShellmapUid; JoinLocal(); diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 68f6d84081..02ab6fd689 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -50,6 +50,18 @@ namespace OpenRA.Server static ModData ModData; static Map Map; + public static void StopListening() + { + conns.Clear(); + GameStarted = false; + try + { + listener.Stop(); + }catch(Exception) + { + } + + } public static void ServerMain(ModData modData, Settings settings, string map) { Log.AddChannel("server", "server.log"); @@ -98,7 +110,7 @@ namespace OpenRA.Server foreach( Socket s in checkRead ) if( s == listener.Server ) AcceptConnection(); - else conns.Single( c => c.socket == s ).ReadData(); + else if (conns.Count > 0) conns.Single( c => c.socket == s ).ReadData(); if (Environment.TickCount - lastPing > MasterPingInterval * 1000) PingMasterServer();