private async Task ReadPipeAsync() { Console.WriteLine("Starting to read pipe"); while (true) { var result = await _pipeReader.ReadAsync(); var rq = result.Buffer; SequencePosition consumed = rq.Start; SequencePosition examined = rq.Start; if (_lengthProtocol.TryParseMessage(rq, ref consumed, ref examined, out var msg)) { ProcessMessage(msg); } if (result.IsCompleted) { break; } //TODO: Investigate how to use examine //need to advance# _pipeReader.AdvanceTo(consumed); } }
private Task StartReceive(PipeReader reader, string id) { return(Task.Run(async() => { while (true) { ReadResult result = await reader.ReadAsync(); ReadOnlySequence <byte> buffer = result.Buffer; SequencePosition consumed = buffer.Start; SequencePosition examined = buffer.Start; if (_messageProtocol.TryParseMessage(buffer, ref consumed, ref examined, out var msg)) { var readResult = Encoding.UTF8.GetString(msg.Payload.ToArray()); Console.WriteLine($"{id}: {readResult}"); } if (result.IsCompleted) { break; } reader.AdvanceTo(consumed); } })); }
public async Task StartRecieve() { while (true) { ReadResult result = await _pipeReader.ReadAsync(); ReadOnlySequence <byte> buffer = result.Buffer; SequencePosition consumed = buffer.Start; SequencePosition examined = buffer.Start; if (_messageProtocol.TryParseMessage(buffer, ref consumed, ref examined, out var msg)) { var readResult = Encoding.UTF8.GetString(msg.Payload.ToArray()); Console.WriteLine($"Client Msg: {readResult}"); } if (result.IsCompleted) { break; } _pipeReader.AdvanceTo(consumed); } }