예제 #1
0
 public async Task RangedRandomToDevNull()
 {
     using (Stream cs = new RangedRandomBytesStream(defCount, 0xAD, 0xEF), dns = new DevNullStream())
         await dns.CopyToAsync(cs);
 }
예제 #2
0
        public async Task <float> measureUploadSpeed(Server server, int size = 1024 *482)
        {
            Contract.Requires(server != null);
            Contract.Requires(size >= 0);
            var prefix = new[] {
                (byte)'&',
                (byte)'c',
                (byte)'o',
                (byte)'n',
                (byte)'t',
                (byte)'e',
                (byte)'n',
                (byte)'t',
                (byte)'0',
                (byte)'=',
            };

            stage = Stage.UPLOAD;

            var req = HttpWebRequest.Create(new Uri(server.uri, "upload.php")) as HttpWebRequest;

            req.Method        = "POST";
            req.ContentType   = "application/x-www-form-urlencoded";
            req.CachePolicy   = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
            req.ContentLength = countOfPieces * (defaultSize + prefix.Length);
            req.KeepAlive     = true;

            req.Credentials = CredentialCache.DefaultCredentials;
            req.Proxy       = hch.Proxy;

            emitProgressEvent(0);
            using (var str = req.GetRequestStream()) {
                using (var ums = new RangedRandomBytesStream(defaultSize, (byte)'A', (byte)'z'))
                {
                    int j = 0;
                    EventedStream.dataLoadListener evtListener = (o, bytes) => emitProgressEvent(100 * (j + bytes / defaultSize) / countOfPieces);
                    ums.onLoading += evtListener;
                    sw.Restart();
                    for (; j < countOfPieces; j++)
                    {
                        prefix[8] = (byte)('0' + j);
                        await str.WriteAsync(prefix, 0, prefix.Length);

                        await str.FlushAsync();

                        await ums.CopyToAsync(str);

                        ums.Position = 0;
                        await str.FlushAsync();
                    }
                    sw.Stop();
                    ums.onLoading -= evtListener;
                }
            }

            await req.GetResponseAsync().ContinueWith(t => t.Result.GetResponseStream().Close());

            float speed = (float)(req.ContentLength / (sw.Elapsed.TotalSeconds));

            emitProgressEvent(100);
            emitMeasuredEvent(speed);
            return(speed);
        }