From f191babec8c5fc5cc35e4291383dbc33c08638a7 Mon Sep 17 00:00:00 2001 From: WolfGaming Date: Thu, 4 Dec 2014 09:26:57 +0000 Subject: [PATCH 1/2] Fix: Game can no longer drop you in a single player game. --- .../ServerTraits/PlayerPinger.cs | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs b/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs index 8ac9f85ad2..3d29753e77 100644 --- a/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs +++ b/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs @@ -34,37 +34,46 @@ namespace OpenRA.Mods.Common.Server { isInitialPing = false; lastPing = Game.RunTime; - foreach (var c in server.Conns.ToList()) + + if (server.LobbyInfo.IsSinglePlayer && server.Conns.Any() && server.GetClient(server.Conns.First()).IpAddress == "127.0.0.1") { - if (c.TimeSinceLastResponse < ConnTimeout) - { + foreach (var c in server.Conns.ToList()) server.SendOrderTo(c, "Ping", Game.RunTime.ToString()); - if (!c.TimeoutMessageShown && c.TimeSinceLastResponse > PingInterval * 2) + } + else + { + foreach (var c in server.Conns.ToList()) + { + if (c.TimeSinceLastResponse < ConnTimeout) { - server.SendMessage(server.GetClient(c).Name + " is experiencing connection problems."); - c.TimeoutMessageShown = true; + server.SendOrderTo(c, "Ping", Game.RunTime.ToString()); + if (!c.TimeoutMessageShown && c.TimeSinceLastResponse > PingInterval * 2) + { + server.SendMessage(server.GetClient(c).Name + " is experiencing connection problems."); + c.TimeoutMessageShown = true; + } + } + else + { + server.SendMessage(server.GetClient(c).Name + " has been dropped after timing out."); + server.DropClient(c, -1); } } - else + + if (Game.RunTime - lastConnReport > ConnReportInterval) { - server.SendMessage(server.GetClient(c).Name + " has been dropped after timing out."); - server.DropClient(c, -1); + lastConnReport = Game.RunTime; + + var timeouts = server.Conns + .Where(c => c.TimeSinceLastResponse > ConnReportInterval && c.TimeSinceLastResponse < ConnTimeout) + .OrderBy(c => c.TimeSinceLastResponse); + + foreach (var c in timeouts) + server.SendMessage("{0} will be dropped in {1} seconds.".F( + server.GetClient(c).Name, (ConnTimeout - c.TimeSinceLastResponse) / 1000)); } } } - - if (Game.RunTime - lastConnReport > ConnReportInterval) - { - lastConnReport = Game.RunTime; - - var timeouts = server.Conns - .Where(c => c.TimeSinceLastResponse > ConnReportInterval && c.TimeSinceLastResponse < ConnTimeout) - .OrderBy(c => c.TimeSinceLastResponse); - - foreach (var c in timeouts) - server.SendMessage("{0} will be dropped in {1} seconds.".F( - server.GetClient(c).Name, (ConnTimeout - c.TimeSinceLastResponse) / 1000)); - } } } } From 20fe03b6c1e8a19194a8d66aeab7fefd9781eb1a Mon Sep 17 00:00:00 2001 From: WolfGaming Date: Sun, 7 Dec 2014 10:30:57 +0000 Subject: [PATCH 2/2] Added comment and a static field for localhost. --- OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs | 5 ++--- OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs | 3 ++- OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs b/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs index 3d29753e77..ae9ee81bbf 100644 --- a/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs +++ b/OpenRA.Mods.Common/ServerTraits/PlayerPinger.cs @@ -35,11 +35,10 @@ namespace OpenRA.Mods.Common.Server isInitialPing = false; lastPing = Game.RunTime; - if (server.LobbyInfo.IsSinglePlayer && server.Conns.Any() && server.GetClient(server.Conns.First()).IpAddress == "127.0.0.1") - { + // Ignore client timeout in singleplayer games to make debugging easier + if (server.LobbyInfo.IsSinglePlayer && !server.Settings.Dedicated) foreach (var c in server.Conns.ToList()) server.SendOrderTo(c, "Ping", Game.RunTime.ToString()); - } else { foreach (var c in server.Conns.ToList()) diff --git a/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs index 2ac1c59b26..caaa25ae53 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Net; using OpenRA.Network; using OpenRA.Widgets; @@ -76,7 +77,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic latency.GetText = () => LobbyUtils.LatencyDescription(ping); latency.GetColor = () => LobbyUtils.LatencyColor(ping); var address = orderManager.LobbyInfo.ClientWithIndex(clientIndex).IpAddress; - if (address == "127.0.0.1" && UPnP.NatDevice != null) + if (address == IPAddress.Loopback.ToString() && UPnP.NatDevice != null) address = UPnP.NatDevice.GetExternalIP().ToString(); var cachedDescriptiveIP = LobbyUtils.DescriptiveIpAddress(address); ip.GetText = () => cachedDescriptiveIP; diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs index 41723428af..c022822c1b 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; +using System.Net; using OpenRA.Graphics; using OpenRA.Mods.Common.Widgets; using OpenRA.Network; @@ -224,7 +225,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic { if (ip == null) return "Unknown Host"; - if (ip == "127.0.0.1") + if (ip == IPAddress.Loopback.ToString()) return "Local Host"; return ip; }