public async System.Threading.Tasks.Task <string> StartSpeedTestAsync() { client = new SpeedTestClient(); settings = await client.GetSettingsAsync(); Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { UpdateIndicators("Getting Settings"); }); Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { UpdateIndicators("Getting Client's Country"); }); clientCountry = await GetClienCountryAsync(); Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { UpdateIndicators("Selecting Best Server by Distance"); }); var servers = SelectServers(); var bestServer = SelectBestServer(servers); UpdateServerInfo(bestServer); Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { UpdateIndicators("Testing Internet Speed"); }); var downloadSpeed = client.TestDownloadSpeed(bestServer, settings.Download.ThreadsPerUrl); UpdateDownloadUi(downloadSpeed); //PrintSpeed("Download", downloadSpeed); Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { UpdateIndicators("Testing Internet Speed"); }); var uploadSpeed = client.TestUploadSpeed(bestServer, settings.Upload.ThreadsPerUrl); //PrintSpeed("Upload", uploadSpeed); UpdateUploadUi(uploadSpeed); return("Down: " + Math.Round(downloadSpeed / 1024, 2).ToString() + "Up: " + Math.Round(uploadSpeed / 1024, 2).ToString()); //Console.WriteLine("Press a key to exit."); //Console.ReadKey(); }
private async Task <Speedtest> RunSpeedtest(DateTimeOffset timestamp) { await _semaphore.WaitAsync(); IsRunning = true; RunStarted?.Invoke(); var test = new Speedtest { Timestamp = timestamp }; try { var settings = await _client.GetSettingsAsync(); var server = settings.Servers .OrderBy(s => s.Distance) .FirstOrDefault(); test.ServerLatency = await _client.TestServerLatencyAsync(server); test.DownloadSpeed = await _client.TestDownloadSpeedAsync(server); test.UploadSpeed = await _client.TestUploadSpeedAsync(server); _logger.LogInformation($"Test ran successfully - Time: {timestamp}, Latency: {test.ServerLatency} ms, " + $"Download: {test.DownloadSpeed / 1000} Mbps, Upload: {test.UploadSpeed / 1000} Mbps"); using var scope = _services.CreateScope(); var context = scope.ServiceProvider.GetRequiredService <AppDbContext>(); context.Speedtests.Add(test); await context.SaveChangesAsync(); } finally { IsRunning = false; RunCompleted?.Invoke(test); _semaphore.Release(); } return(test); }
static async Task Main() { Console.WriteLine("Getting speedtest.net settings and server list..."); client = new SpeedTestClient(); settings = await client.GetSettingsAsync(); var servers = await SelectServers(); var bestServer = SelectBestServer(servers); Console.WriteLine("Testing speed..."); var downloadSpeed = await client.TestDownloadSpeedAsync(bestServer, settings.Download.ThreadsPerUrl); PrintSpeed("Download", downloadSpeed); var uploadSpeed = await client.TestUploadSpeedAsync(bestServer, settings.Upload.ThreadsPerUrl); PrintSpeed("Upload", uploadSpeed); Console.WriteLine("Press a key to exit."); Console.ReadKey(); }