private void WriteToBuffer(ReadOnlySpan <byte> span) { // get what was read into the buffer var remaining = _limit - _bytesBuffered; if (remaining == 0) { return; } if (span.Length == 0 && !HasLogged) { // Done reading, log the string. LogRequestBody(); return; } var innerCount = Math.Min(remaining, span.Length); if (span.Slice(0, innerCount).TryCopyTo(_tailMemory.Span)) { _tailBytesBuffered += innerCount; _bytesBuffered += innerCount; _tailMemory = _tailMemory.Slice(innerCount); } else { BuffersExtensions.Write(this, span.Slice(0, innerCount)); } if (_limit - _bytesBuffered == 0 && !HasLogged) { LogRequestBody(); } }
private System.Threading.Tasks.Task ForwardInput(Pipe inputPipe, StreamWriter input) { return(System.Threading.Tasks.Task.Run(async() => { try { while (true) { var readContent = await inputPipe.Reader.ReadAsync(); if (readContent.Buffer.Length == 0) { await System.Threading.Tasks.Task.Delay(100); } else { var content = BuffersExtensions.ToArray(readContent.Buffer); outputPane.WriteAsync($"[Client -> Server] {Encoding.UTF8.GetString(content)}").Forget(); inputPipe.Reader.AdvanceTo(readContent.Buffer.End); await input.WriteAsync(Encoding.UTF8.GetString(content).ToCharArray()); } } } catch (Exception e) { throw; } })); }
public void SequencePositionOfMultiSegment() { var(first, last) = BufferList.Create( new byte[] { 1, 2 }, new byte[] { 3, 4 } ); var bytes = new ReadOnlySequence <byte>(first, 0, last, last.Memory.Length); Assert.Equal(4, bytes.Length); // Static method call to avoid calling instance methods Assert.False(Sequence.PositionOf(bytes, 0).HasValue); for (int i = 0; i < bytes.Length; i++) { var value = (byte)(i + 1); var listPosition = MemoryListExtensions.PositionOf(first, value).GetValueOrDefault(); var(node, index) = listPosition.Get <IMemoryList <byte> >(); if (listPosition != default) { Assert.Equal(value, node.Memory.Span[index]); } var robPosition = BuffersExtensions.PositionOf(bytes, value); var robSequencePosition = Sequence.PositionOf(bytes, value); Assert.Equal(listPosition, robPosition); Assert.Equal(listPosition, robSequencePosition); var robSlice = bytes.Slice(1); robPosition = BuffersExtensions.PositionOf(robSlice, value); robSequencePosition = Sequence.PositionOf(robSlice, value); if (i > 0) { Assert.Equal(listPosition, robPosition); Assert.Equal(listPosition, robSequencePosition); } else { Assert.False(robPosition.HasValue); Assert.False(robSequencePosition.HasValue); } if (listPosition != default) { robSlice = bytes.Slice(listPosition); Assert.Equal(value, robSlice.First.Span[0]); } } }
public JsonWriter(byte[] originData) { buffer = new ArrayBufferWriter <byte>(); BuffersExtensions.Write(buffer, new ReadOnlySpan <byte>(originData)); writer = new Utf8JsonWriter(buffer, options); }