public async Task RangedRandomToDevNull() { using (Stream cs = new RangedRandomBytesStream(defCount, 0xAD, 0xEF), dns = new DevNullStream()) await dns.CopyToAsync(cs); }
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); }