Beispiel #1
0
        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();
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 public unsafe bool ParseRequestLine(IParserRequestHandler handler, in ReadOnlySequence <byte> buffer, out SequencePosition consumed, out SequencePosition examined)