Optimize latency and IP address information testing

If the first test fails, it will be tested again after 500ms.
This commit is contained in:
2dust 2025-02-26 14:30:10 +08:00
parent a7f35d4495
commit 984b97fc14
2 changed files with 14 additions and 11 deletions

View file

@ -1,4 +1,4 @@
using System.Diagnostics; using System.Diagnostics;
using System.Net; using System.Net;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Net.Sockets; using System.Net.Sockets;
@ -222,20 +222,20 @@ namespace ServiceLib.Services
public async Task<int> RunAvailabilityCheck(IWebProxy? webProxy) public async Task<int> RunAvailabilityCheck(IWebProxy? webProxy)
{ {
var responseTime = -1;
try try
{ {
webProxy ??= await GetWebProxy(true); webProxy ??= await GetWebProxy(true);
var config = AppHandler.Instance.Config;
try for (var i = 0; i < 2; i++)
{ {
var config = AppHandler.Instance.Config; responseTime = await GetRealPingTime(config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10);
var responseTime = await GetRealPingTime(config.SpeedTestItem.SpeedPingTestUrl, webProxy, 10); if (responseTime > 0)
return responseTime; {
} break;
catch (Exception ex) }
{ await Task.Delay(500);
Logging.SaveLog(_tag, ex);
return -1;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -243,6 +243,7 @@ namespace ServiceLib.Services
Logging.SaveLog(_tag, ex); Logging.SaveLog(_tag, ex);
return -1; return -1;
} }
return responseTime;
} }
public async Task<int> GetRealPingTime(string url, IWebProxy? webProxy, int downloadTimeout) public async Task<int> GetRealPingTime(string url, IWebProxy? webProxy, int downloadTimeout)
@ -319,4 +320,4 @@ namespace ServiceLib.Services
ServicePointManager.DefaultConnectionLimit = 256; ServicePointManager.DefaultConnectionLimit = 256;
} }
} }
} }

View file

@ -316,6 +316,8 @@ namespace ServiceLib.ViewModels
return; return;
} }
_updateView?.Invoke(EViewAction.DispatcherServerAvailability, ResUI.Speedtesting);
var msg = await (new UpdateService()).RunAvailabilityCheck(); var msg = await (new UpdateService()).RunAvailabilityCheck();
NoticeHandler.Instance.SendMessageEx(msg); NoticeHandler.Instance.SendMessageEx(msg);