public async Task ReadPipeAsync(PipeReader reader, IParserRequestHandler handler) { while (true) { var result = await reader.ReadAsync(); var buffer = result.Buffer; SequencePosition?position = null; do { position = buffer.PositionOf((byte)'\n'); if (position != null) { var sequence = buffer.Slice(0, position.Value); Logger.Debug("Parsing request..."); Parser.ParseRequestLine(handler, sequence, out var consumed, out var examined); buffer = buffer.Slice(buffer.GetPosition(1, position.Value)); } }while (position != null); reader.AdvanceTo(buffer.Start, buffer.End); if (result.IsCompleted) { break; } } reader.Complete(); }
public Task ProcessLinesAsync(Socket socket, IParserRequestHandler handler) { var pipe = new Pipe(); Logger.Debug("Filling pipe..."); var writing = FillPipeAsync(socket, pipe.Writer); Logger.Debug("Reading pipe..."); var reading = ReadPipeAsync(pipe.Reader, handler); return(Task.WhenAll(reading, writing)); }
public unsafe bool ParseRequestLine(IParserRequestHandler handler, in ReadOnlySequence <byte> buffer, out SequencePosition consumed, out SequencePosition examined)