static public async Task <List <SpeedTestClient.Result> > RunSpeedTestWithMultiTryAsync(TcpIpSystem system, IPAddress ip, int port, int numConnection, int timespan, SpeedTestModeFlag mode, int numTry, int interval, CancellationToken cancel = default) { List <SpeedTestClient.Result> ret = new List <Result>(); numTry = Math.Max(numTry, 1); for (int i = 0; i < numTry; i++) { if (cancel.IsCancellationRequested) { return(new List <Result>()); } SpeedTestClient tc = new SpeedTestClient(system, ip, port, numConnection, timespan, mode, cancel); var result = await tc.RunClientAsync(); if (result != null) { ret.Add(result); } await cancel._WaitUntilCanceledAsync(Util.GenRandInterval(interval)); } return(ret); }
protected override async Task GetValueAsync(SortedDictionary <string, string> ret, RefInt nextPollingInterval, CancellationToken cancel = default) { SnmpWorkSettings settings = Host.Settings; if (settings.SpeedTargets._IsSamei("none") || settings.SpeedTargets._IsSamei("null")) { return; } string[] speedTargets = settings.SpeedTargets._Split(StringSplitOptions.RemoveEmptyEntries, ","); count++; foreach (string target in speedTargets) { ParseTargetString(target, out string hostnameAndPort, out string alias); cancel.ThrowIfCancellationRequested(); string[] tokens = hostnameAndPort._Split(StringSplitOptions.RemoveEmptyEntries, '|'); string host; int port = 9821; host = tokens[0]; if (tokens.Length >= 2) { port = tokens[1]._ToInt(); } //long downloadBps_1 = 0; //long uploadBps_1 = 0; long downloadBps_32 = 0; long uploadBps_32 = 0; int intervalBetween = settings.SpeedIntervalsSec * 1000; if (count <= 1) { intervalBetween = 0; } int numTry = settings.SpeedTryCount; if (count <= 1) { numTry = 1; } int span = settings.SpeedSpanSec * 1000; if (count <= 1) { span = 2000; } try { IPAddress ipAddress = await LocalNet.GetIpAsync(host, cancel : cancel); try { var downloadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel); downloadBps_32 = downloadResult_32.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault(); } catch (Exception ex) { ex._Debug(); } try { var uploadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel); uploadBps_32 = uploadResult_32.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault(); } catch (Exception ex) { ex._Debug(); } //try //{ // var downloadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel); // downloadBps_1 = downloadResult_1.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault(); //} //catch (Exception ex) //{ // ex._Debug(); //} //try //{ // var uploadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel); // uploadBps_1 = uploadResult_1.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault(); //} //catch (Exception ex) //{ // ex._Debug(); //} } catch (Exception ex) { ex._Debug(); } ret.TryAdd($"{alias} - RX (Mbps)", ((double)downloadBps_32 / 1000.0 / 1000.0).ToString("F3")); ret.TryAdd($"{alias} - TX (Mbps)", ((double)uploadBps_32 / 1000.0 / 1000.0).ToString("F3")); //ret.TryAdd($"{alias} - 01_RX (Mbps)", ((double)downloadBps_1 / 1000.0 / 1000.0).ToString("F3")); //ret.TryAdd($"{alias} - 01_TX (Mbps)", ((double)uploadBps_1 / 1000.0 / 1000.0).ToString("F3")); } }