static void WriteNext(IEnumerator <string> data, IDataConsumer c, bool sync) { while (true) { if (!data.MoveNext()) { c.OnEnd(); data.Dispose(); break; } var seg = new ArraySegment <byte>(Encoding.UTF8.GetBytes(data.Current)); if (sync) { if (c.OnData(seg, null)) { throw new Exception("sync write should have returned false"); } } else if (c.OnData( seg, () => WriteNext(data, c, sync))) { break; } } }
public IDisposable Connect(IDataConsumer channel) { return new Disposable(del( (data, continuation) => channel.OnData(data, continuation), error => channel.OnError(error), () => channel.OnEnd())); }
public IDisposable Connect(IDataConsumer channel) { // null continuation, consumer must swallow the data immediately. channel.OnData(data, null); channel.OnEnd(); return null; }
public IDisposable Connect(IDataConsumer channel) { var fileInfo = new FileInfo(_filepath); using (FileStream fileStream = fileInfo.Open(FileMode.Open, FileAccess.Read)) { var buffer = new byte[fileInfo.Length]; fileStream.Read(buffer, 0, (int)fileInfo.Length); int length = (int)fileInfo.Length; int offset = 0; if (_requestHeaders.ContainsKey(HttpRequestHeader.Range.ToString())) { string range = _requestHeaders[HttpRequestHeader.Range.ToString()]; Regex rangeEx = new Regex(@"bytes=([\d]*)-([\d]*)"); if (rangeEx.IsMatch(range)) { int from = Convert.ToInt32(rangeEx.Match(range).Groups[1].Value); int to = Convert.ToInt32(rangeEx.Match(range).Groups[2].Value); offset = from; length = (to - from) + 1; } } ArraySegment <byte> data = new ArraySegment <byte>(buffer, offset, length); channel.OnData(data, null); Log.DebugFormat("Wrote {0} bytes to buffer", data.Array.Length); channel.OnEnd(); return(null); } }
public IDisposable Connect(IDataConsumer channel) { // null continuation, consumer must swallow the data immediately. channel.OnData(data, null); channel.OnEnd(); return(null); }
public void Render(IDataConsumer consumer, HttpResponseHead head) { var status = head.Status; var headers = head.Headers; // XXX don't reallocate every time var sb = new StringBuilder(); sb.AppendFormat("HTTP/1.1 {0}\r\n", status); if (headers == null) headers = new Dictionary<string, string>(); if (!headers.ContainsKey("Server")) headers["Server"] = "Kayak"; if (!headers.ContainsKey("Date")) headers["Date"] = DateTime.UtcNow.ToString(); foreach (var pair in headers) foreach (var line in pair.Value.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) sb.AppendFormat("{0}: {1}\r\n", pair.Key, line); sb.Append("\r\n"); consumer.OnData(new ArraySegment<byte>(Encoding.ASCII.GetBytes(sb.ToString())), null); }
public IDisposable Connect(IDataConsumer channel) { var fileInfo = new FileInfo(_filepath); using(FileStream fileStream = fileInfo.Open(FileMode.Open, FileAccess.Read)) { var buffer = new byte[fileInfo.Length]; fileStream.Read(buffer, 0, (int) fileInfo.Length); int length = (int) fileInfo.Length; int offset = 0; if(_requestHeaders.ContainsKey(HttpRequestHeader.Range.ToString())) { string range = _requestHeaders[HttpRequestHeader.Range.ToString()]; Regex rangeEx = new Regex(@"bytes=([\d]*)-([\d]*)"); if(rangeEx.IsMatch(range)) { int from = Convert.ToInt32(rangeEx.Match(range).Groups[1].Value); int to = Convert.ToInt32(rangeEx.Match(range).Groups[2].Value); offset = from; length = (to - from) +1; } } ArraySegment<byte> data = new ArraySegment<byte>(buffer, offset, length); channel.OnData(data, null); _log.DebugFormat("Wrote {0} bytes to buffer", data.Array.Length); channel.OnEnd(); return null; } }
public IDisposable Connect(IDataConsumer channel) { this.channel = channel; if (buffer != null) { buffer.Each(d => channel.OnData(new ArraySegment <byte>(d), null)); // XXX this maybe is kinda wrong. if (continuation != null) { continuation(); } } if (error != null) { channel.OnError(error); } if (gotEnd) { channel.OnEnd(); } return(disposable()); }
public void OnEnd() { byte[] allbytes = ConvertToByteArray(_buffer); _buffer.Clear(); _wrappedConsumer.OnData(new ArraySegment <byte>(allbytes), null); _wrappedConsumer.OnEnd(); }
public IDisposable Connect(IDataConsumer channel) { // null continuation, consumer must swallow the data immediately. var bytes = new ArraySegment<byte>(dataFunc()); channel.OnData(bytes, null); channel.OnEnd(); return null; }
public IDisposable Connect(IDataConsumer channel) { // null continuation, consumer must swallow the data immediately. var bytes = new ArraySegment <byte>(dataFunc()); channel.OnData(bytes, null); channel.OnEnd(); return(null); }
public bool OnData(ArraySegment <byte> data, Action continuation) { if (channel == null) { return(false); } return(channel.OnData(data, continuation)); }
public IDisposable Connect(IDataConsumer channel) { using(Stream source = File.OpenRead(_fileName)) { var buffer = new byte[_bufferSize]; while(source.Read(buffer, 0, buffer.Length) > 0) { channel.OnData(new ArraySegment<byte>(buffer), null); } } channel.OnEnd(); return null; }
public IDisposable Connect(IDataConsumer channel) { try { channel?.OnData(data, null); channel?.OnEnd(); } catch (Exception) { } return(null); }
public IDisposable Connect(IDataConsumer channel) { // null continuation, consumer must swallow the data immediately. byte[] storage = new byte[4096]; using (FileStream stream = new FileStream(this.m_Path, FileMode.Open, FileAccess.Read)) { while (stream.Position < stream.Length) { int count = stream.Read(storage, 0, 4096); channel.OnData(new ArraySegment <byte>(storage, 0, count), null); } channel.OnEnd(); } return(null); }
public IDisposable Connect(IDataConsumer channel) { this.channel = channel; if (buffer != null) { buffer.Each(d => channel.OnData(new ArraySegment<byte>(d), null)); // XXX this maybe is kinda wrong. if (continuation != null) continuation(); } if (error != null) channel.OnError(error); if (gotEnd) channel.OnEnd(); return disposable(); }
public IDisposable Connect(IDataConsumer channel) { var cts = new CancellationTokenSource(); del( (data, continuation)=> { if (channel.OnData(data, () => continuation(null)) == true) { return OwinConstants.CompletingAsynchronously; } return OwinConstants.CompletedSynchronously; }, error => { if (error == null) channel.OnEnd(); else channel.OnError(error); }, cts.Token); return new Disposable(cts.Cancel); }
public void Render(IDataConsumer consumer, HttpResponseHead head) { var status = head.Status; var headers = head.Headers; // XXX don't reallocate every time var sb = new StringBuilder(); sb.AppendFormat("HTTP/1.1 {0}\r\n", status); if (headers == null) { headers = new Dictionary <string, string>(); } if (!headers.ContainsKey("Server")) { headers["Server"] = "Kayak"; } if (!headers.ContainsKey("Date")) { headers["Date"] = DateTime.UtcNow.ToString(); } foreach (var pair in headers) { foreach (var line in pair.Value.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) { sb.AppendFormat("{0}: {1}\r\n", pair.Key, line); } } sb.Append("\r\n"); consumer.OnData(new ArraySegment <byte>(Encoding.ASCII.GetBytes(sb.ToString())), null); }
public bool OnData(ArraySegment <byte> data, Action ack) { if (channel == null) { if (buffer == null) { buffer = new DataBuffer(); } buffer.Add(data); if (ack != null) { this.continuation = ack; return(true); } return(false); } else { return(channel.OnData(data, ack)); } }
public IDisposable Connect(IDataConsumer channel) { channel.OnData(data, null); channel.OnEnd(); return null; }
public void Render(IDataConsumer consumer, HttpResponseHead head) { if (Rendered) throw new InvalidOperationException("already rendered"); Rendered = true; consumer.OnData(new ArraySegment<byte>(Encoding.ASCII.GetBytes("[headers]")), null); }
void WriteSync(IDataConsumer c, string str) { c.OnData(new ArraySegment<byte>(Encoding.UTF8.GetBytes(str)), null); }
public IDisposable Connect(IDataConsumer channel) { channel.OnData(new ArraySegment<byte>(), null); channel.OnEnd(); return null; }
public bool OnData(ArraySegment <byte> data, Action continuation) { return(consumer.OnData(data, continuation)); }
void RunAsyncProd(IDataConsumer consumer, IEnumerator<ArraySegment<byte>> data) { while (true) { if (!data.MoveNext()) { consumer.OnEnd(); data.Dispose(); break; } if (consumer.OnData(data.Current, () => RunAsyncProd(consumer, data))) break; } }
public bool OnRequestData(ArraySegment <byte> data, Action continuation) { return(requestBody.OnData(data, continuation)); }
public IDisposable Connect(IDataConsumer channel) { channel.OnData(new ArraySegment <byte>(), null); channel.OnEnd(); return(null); }
public IDisposable Connect(IDataConsumer channel) { channel.OnData(_rawData, null); channel.OnEnd(); return(null); }
void RenderContinue() { consumer.OnData(oneHunderedContinue, null); }
static void WriteNext(IEnumerator<string> data, IDataConsumer c, bool sync) { while (true) { if (!data.MoveNext()) { c.OnEnd(); data.Dispose(); break; } var seg = new ArraySegment<byte>(Encoding.UTF8.GetBytes(data.Current)); if (sync) { if (c.OnData(seg, null)) throw new Exception("sync write should have returned false"); } else if (c.OnData( seg, () => WriteNext(data, c, sync))) break; } }