コード例 #1
0
        /// <summary>
        /// Test latency (ping) to server
        /// </summary>
        /// <returns>Latency in milliseconds (ms)</returns>
        public async Task <int> TestServerLatencyAsync(Server server, int retryCount = 3)
        {
            var latencyUri = CreateTestUrl(server, "latency.txt");
            var timer      = new Stopwatch();

            for (var i = 0; i < retryCount; i++)
            {
                string testString;
                try
                {
                    timer.Start();
                    testString = await SpeedTestWebClient.client.GetAsync(SpeedTestWebClient.AddTimeStamp(new Uri(latencyUri)), HttpCompletionOption.ResponseHeadersRead).GetAwaiter().GetResult().Content.ReadAsStringAsync();
                }
                catch (WebException)
                {
                    continue;
                }
                finally
                {
                    timer.Stop();
                }

                if (!testString.StartsWith("test=test"))
                {
                    throw new InvalidOperationException("Server returned incorrect test string for latency.txt");
                }
            }

            return((int)timer.ElapsedMilliseconds / retryCount);
        }
コード例 #2
0
        /// <summary>
        /// Test download speed to server
        /// </summary>
        /// <returns>Download speed in Kbps</returns>
        public double TestDownloadSpeed(Server server, int simultaniousDownloads = 2, int retryCount = 2)
        {
            var testData = GenerateDownloadUrls(server, retryCount);

            return(TestSpeed(testData, async(url) =>
            {
                var data = await SpeedTestWebClient.client.GetAsync(SpeedTestWebClient.AddTimeStamp(new Uri(url)), HttpCompletionOption.ResponseHeadersRead).GetAwaiter().GetResult().Content.ReadAsStringAsync();
                return data.Length;
            }, simultaniousDownloads));
        }