diff --git a/DXMainClient/Domain/Multiplayer/CnCNet/CnCNetPlayerCountTask.cs b/DXMainClient/Domain/Multiplayer/CnCNet/CnCNetPlayerCountTask.cs
index d289f5839..582b7af6c 100644
--- a/DXMainClient/Domain/Multiplayer/CnCNet/CnCNetPlayerCountTask.cs
+++ b/DXMainClient/Domain/Multiplayer/CnCNet/CnCNetPlayerCountTask.cs
@@ -22,7 +22,9 @@ public static class CnCNetPlayerCountTask
public static void InitializeService(CancellationTokenSource cts)
{
cncnetLiveStatusIdentifier = ClientConfiguration.Instance.CnCNetLiveStatusIdentifier;
- PlayerCount = GetCnCNetPlayerCount();
+
+ // This call is synchronous. Therefore, we use a short timeout to avoid blocking the main thread for too long.
+ PlayerCount = GetCnCNetPlayerCount(timeoutMilliseconds: 1000);
CnCNetGameCountUpdated?.Invoke(null, new PlayerCountEventArgs(PlayerCount));
ThreadPool.QueueUserWorkItem(new WaitCallback(RunService), cts);
@@ -41,12 +43,12 @@ private static void RunService(object tokenObj)
}
else
{
- CnCNetGameCountUpdated?.Invoke(null, new PlayerCountEventArgs(GetCnCNetPlayerCount()));
+ CnCNetGameCountUpdated?.Invoke(null, new PlayerCountEventArgs(GetCnCNetPlayerCount(timeoutMilliseconds: 5000)));
}
}
}
- private static int GetCnCNetPlayerCount()
+ private static int GetCnCNetPlayerCount(int timeoutMilliseconds = 5000)
{
try
{
@@ -56,7 +58,7 @@ private static int GetCnCNetPlayerCount()
if (string.IsNullOrWhiteSpace(ClientConfiguration.Instance.CnCNetPlayerCountURL))
return -1;
- WebClient client = new ExtendedWebClient();
+ WebClient client = new ExtendedWebClient(timeout: timeoutMilliseconds);
Stream data = client.OpenRead(ClientConfiguration.Instance.CnCNetPlayerCountURL);
string info = string.Empty;
diff --git a/DXMainClient/Domain/Multiplayer/CnCNet/ExtendedWebClient.cs b/DXMainClient/Domain/Multiplayer/CnCNet/ExtendedWebClient.cs
index 2fdac16fa..b41a63f83 100644
--- a/DXMainClient/Domain/Multiplayer/CnCNet/ExtendedWebClient.cs
+++ b/DXMainClient/Domain/Multiplayer/CnCNet/ExtendedWebClient.cs
@@ -8,8 +8,15 @@ namespace DTAClient.Domain.Multiplayer.CnCNet
///
class ExtendedWebClient : WebClient
{
+ ///
+ /// Initializes a new instance of the class with a default timeout of 10 seconds.
+ ///
public ExtendedWebClient() : this(timeout: 10000) { }
+ ///
+ /// Initializes a new instance of the class with a specified timeout.
+ ///
+ /// Gets or sets the length of time, in milliseconds, before the request times out.
public ExtendedWebClient(int timeout)
{
this.timeout = timeout;