From 9e37f67b69e4409b3db24b2cf9bbc7931715762d Mon Sep 17 00:00:00 2001 From: timt Date: Thu, 15 Oct 2020 15:48:58 +1100 Subject: [PATCH 1/3] Added MultiplexedStreamReader --- src/Docker.DotNet/MultiplexedStreamReader.cs | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/Docker.DotNet/MultiplexedStreamReader.cs diff --git a/src/Docker.DotNet/MultiplexedStreamReader.cs b/src/Docker.DotNet/MultiplexedStreamReader.cs new file mode 100644 index 000000000..7aff772d4 --- /dev/null +++ b/src/Docker.DotNet/MultiplexedStreamReader.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Docker.DotNet +{ + public class MultiplexedStreamReader + { + private readonly MultiplexedStream _stream; + + public MultiplexedStreamReader(MultiplexedStream stream) + { + _stream = stream; + } + + public async Task ReadLineAsync(CancellationToken token) + { + var line = new List(); + + var buffer = new byte[1]; + + while (true) + { + var res = await _stream.ReadOutputAsync(buffer, 0, 1, token); + + if (res.Count == 0) + { + continue; + } + + else if (buffer[0] == '\n') + { + return Encoding.UTF8.GetString(line.ToArray()); + } + + else + { + line.Add(buffer[0]); + } + } + } + } +} From 7ef1e8b0384d977b245c45a7f9a3cfb240905dee Mon Sep 17 00:00:00 2001 From: timt Date: Thu, 15 Oct 2020 15:56:20 +1100 Subject: [PATCH 2/3] Added default for cancellation token in read line --- src/Docker.DotNet/MultiplexedStreamReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Docker.DotNet/MultiplexedStreamReader.cs b/src/Docker.DotNet/MultiplexedStreamReader.cs index 7aff772d4..5e03642bb 100644 --- a/src/Docker.DotNet/MultiplexedStreamReader.cs +++ b/src/Docker.DotNet/MultiplexedStreamReader.cs @@ -14,7 +14,7 @@ public MultiplexedStreamReader(MultiplexedStream stream) _stream = stream; } - public async Task ReadLineAsync(CancellationToken token) + public async Task ReadLineAsync(CancellationToken token = default) { var line = new List(); From da4a4f0063ef95487c65b4f0c18156fab743a5a1 Mon Sep 17 00:00:00 2001 From: ACoderLife <37108462+ACoderLife@users.noreply.github.com> Date: Mon, 19 Sep 2022 11:26:55 +1000 Subject: [PATCH 3/3] support cancellation --- src/Docker.DotNet/MultiplexedStreamReader.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Docker.DotNet/MultiplexedStreamReader.cs b/src/Docker.DotNet/MultiplexedStreamReader.cs index 5e03642bb..7e7e8b476 100644 --- a/src/Docker.DotNet/MultiplexedStreamReader.cs +++ b/src/Docker.DotNet/MultiplexedStreamReader.cs @@ -2,6 +2,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; +using Docker.DotNet; namespace Docker.DotNet { @@ -14,24 +15,25 @@ public MultiplexedStreamReader(MultiplexedStream stream) _stream = stream; } - public async Task ReadLineAsync(CancellationToken token = default) + public async Task ReadLineAsync(CancellationToken cancellationToken) { + var line = new List(); var buffer = new byte[1]; - while (true) + while (!cancellationToken.IsCancellationRequested) { - var res = await _stream.ReadOutputAsync(buffer, 0, 1, token); + var res = await _stream.ReadOutputAsync(buffer, 0, 1, cancellationToken); if (res.Count == 0) { - continue; + return null; } else if (buffer[0] == '\n') { - return Encoding.UTF8.GetString(line.ToArray()); + break; } else @@ -39,6 +41,8 @@ public async Task ReadLineAsync(CancellationToken token = default) line.Add(buffer[0]); } } + + return Encoding.UTF8.GetString(line.ToArray()); } } }