Stream GetBufferingStream(string streamUrl) { var memoryStream = new DualStream(); Task.Run(() => { int byteCounter = 0; try { var webClient = new WebClient(); var networkStream = webClient.OpenRead(streamUrl); if (networkStream == null) { return; } byte[] buffer = new byte[0x1000]; while (true) { int read = networkStream.Read(buffer, 0, buffer.Length); if (read <= 0) { break; } byteCounter += read; totalSourceBytes += read; memoryStream.Write(buffer, 0, read); } } catch (Exception ex) { Console.WriteLine("Exception while reading network stream: " + ex); } NetworkDone = true; Console.WriteLine("net: done. ({0} read)", byteCounter); }); return(memoryStream); }
static async Task OutputFunc(Stream sourceStream, DualStream targetBuffer, CancellationToken cancellationToken) { try { byte[] buffer = new byte[1024]; while (!cancellationToken.IsCancellationRequested) { // When there is new stuff available on the network we want to get it instantly int read = await sourceStream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); if (read > 0) { targetBuffer.Write(buffer, 0, read); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("OutputFunc stopped"); }
Stream GetBufferingStream(string streamUrl) { var memoryStream = new DualStream(); Task.Run(() => { int byteCounter = 0; try { var webClient = new WebClient(); var networkStream = webClient.OpenRead(streamUrl); if (networkStream == null) return; byte[] buffer = new byte[0x1000]; while (true) { int read = networkStream.Read(buffer, 0, buffer.Length); if (read <= 0) break; byteCounter += read; totalSourceBytes += read; memoryStream.Write(buffer, 0, read); } } catch (Exception ex) { Console.WriteLine("Exception while reading network stream: " + ex); } NetworkDone = true; Console.WriteLine("net: done. ({0} read)", byteCounter); }); return memoryStream; }