From 43492b920dae1a6f9ece53009fa511e7a312b002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 7 Apr 2013 19:31:08 +0200 Subject: [PATCH] Ping.SendAsync to reduce UI freezing --- OpenRA.Game/Network/GameServer.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/OpenRA.Game/Network/GameServer.cs b/OpenRA.Game/Network/GameServer.cs index c31e2a01cd..d2cf4c918a 100644 --- a/OpenRA.Game/Network/GameServer.cs +++ b/OpenRA.Game/Network/GameServer.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Net.NetworkInformation; +using System.Threading; namespace OpenRA.Network { @@ -75,9 +76,21 @@ namespace OpenRA.Network { hasBeenPinged = true; var pingSender = new Ping(); - PingReply reply = pingSender.Send(Address.Split(':')[0]); - if (reply != null && reply.Status == IPStatus.Success) - Latency = (int)reply.RoundtripTime; + pingSender.PingCompleted += new PingCompletedEventHandler(pongRecieved); + AutoResetEvent waiter = new AutoResetEvent(false); + pingSender.SendAsync(Address.Split(':')[0], waiter); + } + } + + void pongRecieved(object sender, PingCompletedEventArgs e) + { + if (e.Cancelled || e.Error != null) + Latency = -1; + else + { + PingReply pong = e.Reply; + if (pong != null && pong.Status == IPStatus.Success) + Latency = (int)pong.RoundtripTime; else Latency = -1; }