From 33322e8795a9b9382b6ce4763c217aab53506bc7 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 28 Apr 2023 21:10:13 +0800 Subject: [PATCH] Improved true connection test --- v2rayN/v2rayN/Handler/DownloadHandle.cs | 36 ++++++++++------------- v2rayN/v2rayN/Handler/SpeedtestHandler.cs | 10 +++---- v2rayN/v2rayN/Handler/UpdateHandle.cs | 4 +-- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 43c54589..54edadf7 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -253,22 +253,20 @@ namespace v2rayN.Handler return null; } - public int RunAvailabilityCheck(IWebProxy? webProxy) + public async Task RunAvailabilityCheck(IWebProxy? webProxy) { try { if (webProxy == null) { - var httpPort = LazyConfig.Instance.GetLocalPort(Global.InboundHttp); - webProxy = new WebProxy(Global.Loopback, httpPort); + webProxy = GetWebProxy(true); } try { var config = LazyConfig.Instance.GetConfig(); - string status = GetRealPingTime(config.speedTestItem.speedPingTestUrl, webProxy, 10, out int responseTime); - bool noError = Utils.IsNullOrEmpty(status); - return noError ? responseTime : -1; + int responseTime = await GetRealPingTime(config.speedTestItem.speedPingTestUrl, webProxy, 10); + return responseTime; } catch (Exception ex) { @@ -283,31 +281,29 @@ namespace v2rayN.Handler } } - public string GetRealPingTime(string url, IWebProxy? webProxy, int downloadTimeout, out int responseTime) + public async Task GetRealPingTime(string url, IWebProxy? webProxy, int downloadTimeout) { - string msg = string.Empty; - responseTime = -1; + int responseTime = -1; try { - HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); - myHttpWebRequest.Timeout = downloadTimeout * 1000; - myHttpWebRequest.Proxy = webProxy; - Stopwatch timer = Stopwatch.StartNew(); - using HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); - if (myHttpWebResponse.StatusCode is not HttpStatusCode.OK and not HttpStatusCode.NoContent) + using var cts = new CancellationTokenSource(); + cts.CancelAfter(TimeSpan.FromSeconds(downloadTimeout)); + using var client = new HttpClient(new SocketsHttpHandler() { - msg = myHttpWebResponse.StatusDescription; - } + Proxy = webProxy, + UseProxy = webProxy != null + }); + await client.GetAsync(url, cts.Token); + responseTime = timer.Elapsed.Milliseconds; } catch (Exception ex) { - Utils.SaveLog(ex.Message, ex); - msg = ex.Message; + //Utils.SaveLog(ex.Message, ex); } - return msg; + return responseTime; } private WebProxy? GetWebProxy(bool blProxy) diff --git a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs index 4dd65a8f..ebf4b2c4 100644 --- a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs +++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs @@ -170,12 +170,12 @@ namespace v2rayN.Handler { continue; } - tasks.Add(Task.Run(() => + tasks.Add(Task.Run(async () => { try { WebProxy webProxy = new(Global.Loopback, it.port); - string output = GetRealPingTime(downloadHandle, webProxy); + string output = await GetRealPingTime(downloadHandle, webProxy); ProfileExHandler.Instance.SetTestDelay(it.indexId, output); UpdateFunc(it.indexId, output); @@ -334,11 +334,11 @@ namespace v2rayN.Handler await RunSpeedTestMulti(); } - public string GetRealPingTime(DownloadHandle downloadHandle, IWebProxy webProxy) + public async Task GetRealPingTime(DownloadHandle downloadHandle, IWebProxy webProxy) { - string status = downloadHandle.GetRealPingTime(_config.speedTestItem.speedPingTestUrl, webProxy, 10, out int responseTime); + int responseTime = await downloadHandle.GetRealPingTime(_config.speedTestItem.speedPingTestUrl, webProxy, 10); //string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status; - return FormatOut(Utils.IsNullOrEmpty(status) ? responseTime : -1, Global.DelayUnit); + return FormatOut(responseTime, Global.DelayUnit); } private int GetTcpingTime(string url, int port) diff --git a/v2rayN/v2rayN/Handler/UpdateHandle.cs b/v2rayN/v2rayN/Handler/UpdateHandle.cs index 02427a48..e5d5b594 100644 --- a/v2rayN/v2rayN/Handler/UpdateHandle.cs +++ b/v2rayN/v2rayN/Handler/UpdateHandle.cs @@ -293,9 +293,9 @@ namespace v2rayN.Handler public void RunAvailabilityCheck(Action update) { - Task.Run(() => + Task.Run(async () => { - var time = (new DownloadHandle()).RunAvailabilityCheck(null); + var time = await (new DownloadHandle()).RunAvailabilityCheck(null); update(false, string.Format(ResUI.TestMeOutput, time)); });