diff --git a/build/dependencies.props b/build/dependencies.props index 4c9180b594..2e004bea50 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -31,7 +31,7 @@ 2.1.0-preview1-27982 2.1.0-preview1-27982 2.1.0-preview1-27982 - 4.5.0-preview1-26102-01 + 4.5.0-preview2-26125-06 2.1.0-preview1-27982 2.1.0-preview1-27982 2.1.0-preview1-27982 @@ -53,23 +53,23 @@ 2.1.0-preview1-27982 2.1.0-preview1-27982 2.0.0 - 2.1.0-preview1-26102-01 + 2.1.0-preview2-26124-07 15.3.0 4.7.49 0.9.0-beta2 10.0.1 1.2.4 - 4.5.0-preview1-26102-01 - 0.1.0-e180104-2 - 4.5.0-preview1-26102-01 - 4.5.0-preview1-26102-01 + 4.5.0-preview2-26125-06 + 0.1.0-preview2-180130-1 + 4.5.0-preview2-26125-06 + 4.5.0-preview2-26125-06 3.1.1 4.3.0 - 4.5.0-preview1-26102-01 - 4.5.0-preview1-26102-01 + 4.5.0-preview2-26125-06 + 4.5.0-preview2-26125-06 4.5.0-preview2-25707-02 2.3.1 2.3.1 - + \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/PipelineReaderExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/PipelineReaderExtensions.cs index f8e486d4ba..c6392b4afa 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/PipelineReaderExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/PipelineReaderExtensions.cs @@ -8,7 +8,7 @@ namespace System.IO.Pipelines { internal static class PipelineReaderExtensions { - public static async Task CopyToAsync(this IPipeReader input, Stream stream, int bufferSize, CancellationToken cancellationToken) + public static async Task CopyToAsync(this PipeReader input, Stream stream, int bufferSize, CancellationToken cancellationToken) { // TODO: Use bufferSize argument while (!cancellationToken.IsCancellationRequested) @@ -26,7 +26,7 @@ namespace System.IO.Pipelines } finally { - input.Advance(inputBuffer.End); + input.AdvanceTo(inputBuffer.End); } } } diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamExtensions.cs index 94de2c4638..b0152f6c7d 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamExtensions.cs @@ -11,19 +11,19 @@ namespace System.IO.Pipelines internal static class StreamExtensions { /// - /// Copies the content of a into a . + /// Copies the content of a into a . /// /// /// /// /// - public static Task CopyToAsync(this Stream stream, IPipeWriter writer, CancellationToken cancellationToken = default) + public static Task CopyToAsync(this Stream stream, PipeWriter writer, CancellationToken cancellationToken = default) { // 81920 is the default bufferSize, there is not stream.CopyToAsync overload that takes only a cancellationToken return stream.CopyToAsync(new PipelineWriterStream(writer), bufferSize: 81920, cancellationToken: cancellationToken); } - public static async Task CopyToEndAsync(this Stream stream, IPipeWriter writer, CancellationToken cancellationToken = default) + public static async Task CopyToEndAsync(this Stream stream, PipeWriter writer, CancellationToken cancellationToken = default) { try { @@ -38,14 +38,14 @@ namespace System.IO.Pipelines } /// - /// Copies a to a asynchronously + /// Copies a to a asynchronously /// - /// The to copy + /// The to copy /// The target /// - public static Task CopyToAsync(this ReadOnlyBuffer buffer, Stream stream) + public static Task CopyToAsync(this ReadOnlyBuffer buffer, Stream stream) { - if (buffer.IsSingleSpan) + if (buffer.IsSingleSegment) { return WriteToStream(stream, buffer.First); } @@ -53,7 +53,7 @@ namespace System.IO.Pipelines return CopyMultipleToStreamAsync(buffer, stream); } - private static async Task CopyMultipleToStreamAsync(this ReadOnlyBuffer buffer, Stream stream) + private static async Task CopyMultipleToStreamAsync(this ReadOnlyBuffer buffer, Stream stream) { foreach (var memory in buffer) { @@ -77,12 +77,12 @@ namespace System.IO.Pipelines } } - public static Task CopyToEndAsync(this IPipeReader input, Stream stream) + public static Task CopyToEndAsync(this PipeReader input, Stream stream) { return input.CopyToEndAsync(stream, 4096, CancellationToken.None); } - public static async Task CopyToEndAsync(this IPipeReader input, Stream stream, int bufferSize, CancellationToken cancellationToken) + public static async Task CopyToEndAsync(this PipeReader input, Stream stream, int bufferSize, CancellationToken cancellationToken) { try { @@ -98,9 +98,9 @@ namespace System.IO.Pipelines private class PipelineWriterStream : Stream { - private readonly IPipeWriter _writer; + private readonly PipeWriter _writer; - public PipelineWriterStream(IPipeWriter writer) + public PipelineWriterStream(PipeWriter writer) { _writer = writer; } @@ -148,9 +148,8 @@ namespace System.IO.Pipelines { cancellationToken.ThrowIfCancellationRequested(); - var output = _writer.Alloc(); - output.Write(new ReadOnlySpan(buffer, offset, count)); - await output.FlushAsync(cancellationToken); + _writer.Write(new ReadOnlySpan(buffer, offset, count)); + await _writer.FlushAsync(cancellationToken); } } } diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamPipeConnection.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamPipeConnection.cs index c2e212f931..b600a85a4a 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamPipeConnection.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/Internal/StreamPipeConnection.cs @@ -3,7 +3,7 @@ namespace System.IO.Pipelines { - internal class StreamPipeConnection : IPipeConnection + internal class StreamPipeConnection : IDuplexPipe { public StreamPipeConnection(PipeOptions options, Stream stream) { @@ -11,9 +11,9 @@ namespace System.IO.Pipelines Output = CreateWriter(options, stream); } - public IPipeReader Input { get; } + public PipeReader Input { get; } - public IPipeWriter Output { get; } + public PipeWriter Output { get; } public void Dispose() { @@ -21,7 +21,7 @@ namespace System.IO.Pipelines Output.Complete(); } - public static IPipeReader CreateReader(PipeOptions options, Stream stream) + public static PipeReader CreateReader(PipeOptions options, Stream stream) { if (!stream.CanRead) { @@ -34,7 +34,7 @@ namespace System.IO.Pipelines return pipe.Reader; } - public static IPipeWriter CreateWriter(PipeOptions options, Stream stream) + public static PipeWriter CreateWriter(PipeOptions options, Stream stream) { if (!stream.CanWrite) { diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsMessageParser.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsMessageParser.cs index 08799a5052..633b54945a 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsMessageParser.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsMessageParser.cs @@ -3,6 +3,7 @@ using System; using System.Buffers; +using System.Collections; using System.Collections.Generic; using System.Collections.Sequences; using System.IO.Pipelines; @@ -24,7 +25,7 @@ namespace Microsoft.AspNetCore.Sockets.Internal.Formatters private InternalParseState _internalParserState = InternalParseState.ReadMessagePayload; private List _data = new List(); - public ParseResult ParseMessage(ReadOnlyBuffer buffer, out Position consumed, out Position examined, out byte[] message) + public ParseResult ParseMessage(ReadOnlyBuffer buffer, out SequencePosition consumed, out SequencePosition examined, out byte[] message) { consumed = buffer.Start; examined = buffer.End; @@ -35,7 +36,7 @@ namespace Microsoft.AspNetCore.Sockets.Internal.Formatters while (buffer.Length > 0) { - if (ReadOnlyBuffer.Seek(start, end, out var lineEnd, ByteLF) == -1) + if (!(buffer.PositionOf(ByteLF) is SequencePosition lineEnd)) { // For the case of data: Foo\r\n\r\ if (_internalParserState == InternalParseState.ReadEndOfMessage) @@ -50,7 +51,7 @@ namespace Microsoft.AspNetCore.Sockets.Internal.Formatters return ParseResult.Incomplete; } - lineEnd = buffer.Move(lineEnd, 1); + lineEnd = buffer.GetPosition(lineEnd, 1); var line = ConvertBufferToSpan(buffer.Slice(start, lineEnd)); buffer = buffer.Slice(line.Length); @@ -148,9 +149,9 @@ namespace Microsoft.AspNetCore.Sockets.Internal.Formatters } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private ReadOnlySpan ConvertBufferToSpan(ReadOnlyBuffer buffer) + private ReadOnlySpan ConvertBufferToSpan(ReadOnlyBuffer buffer) { - if (buffer.IsSingleSpan) + if (buffer.IsSingleSegment) { return buffer.First.Span; } diff --git a/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsTransport.cs b/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsTransport.cs index ae0340d5bf..864c98247c 100644 --- a/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsTransport.cs +++ b/src/Microsoft.AspNetCore.Sockets.Client.Http/ServerSentEventsTransport.cs @@ -86,7 +86,7 @@ namespace Microsoft.AspNetCore.Sockets.Client var stream = await response.Content.ReadAsStreamAsync(); var pipelineReader = StreamPipeConnection.CreateReader(new PipeOptions(_memoryPool), stream); var readCancellationRegistration = cancellationToken.Register( - reader => ((IPipeReader)reader).CancelPendingRead(), pipelineReader); + reader => ((PipeReader)reader).CancelPendingRead(), pipelineReader); try { while (true) @@ -122,7 +122,7 @@ namespace Microsoft.AspNetCore.Sockets.Client } finally { - pipelineReader.Advance(consumed, examined); + pipelineReader.AdvanceTo(consumed, examined); } } } diff --git a/test/Microsoft.AspNetCore.SignalR.Client.Tests/ServerSentEventsParserTests.cs b/test/Microsoft.AspNetCore.SignalR.Client.Tests/ServerSentEventsParserTests.cs index 14752323fe..5bd48aba45 100644 --- a/test/Microsoft.AspNetCore.SignalR.Client.Tests/ServerSentEventsParserTests.cs +++ b/test/Microsoft.AspNetCore.SignalR.Client.Tests/ServerSentEventsParserTests.cs @@ -3,6 +3,7 @@ using System; using System.Buffers; +using System.Collections; using System.Collections.Generic; using System.Collections.Sequences; using System.IO.Pipelines; @@ -32,7 +33,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests public void ParseSSEMessageSuccessCases(string encodedMessage, string expectedMessage) { var buffer = Encoding.UTF8.GetBytes(encodedMessage); - var readableBuffer = new ReadOnlyBuffer(buffer); + var readableBuffer = new ReadOnlyBuffer(buffer); var parser = new ServerSentEventsMessageParser(); var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message); @@ -58,7 +59,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests public void ParseSSEMessageFailureCases(string encodedMessage, string expectedExceptionMessage) { var buffer = Encoding.UTF8.GetBytes(encodedMessage); - var readableBuffer = new ReadOnlyBuffer(buffer); + var readableBuffer = new ReadOnlyBuffer(buffer); var parser = new ServerSentEventsMessageParser(); var ex = Assert.Throws(() => { parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message); }); @@ -86,7 +87,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests public void ParseSSEMessageIncompleteParseResult(string encodedMessage) { var buffer = Encoding.UTF8.GetBytes(encodedMessage); - var readableBuffer = new ReadOnlyBuffer(buffer); + var readableBuffer = new ReadOnlyBuffer(buffer); var parser = new ServerSentEventsMessageParser(); var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message); @@ -114,7 +115,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests var pipe = new Pipe(new PipeOptions(pool)); byte[] message = null; - Position consumed = default, examined = default; + SequencePosition consumed = default, examined = default; for (var i = 0; i < messageParts.Length; i++) { @@ -123,7 +124,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests var result = await pipe.Reader.ReadAsync(); var parseResult = parser.ParseMessage(result.Buffer, out consumed, out examined, out message); - pipe.Reader.Advance(consumed, examined); + pipe.Reader.AdvanceTo(consumed, examined); // parse result should be complete only after we parsed the last message part var expectedResult = @@ -167,7 +168,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests var parseResult = parser.ParseMessage(result.Buffer, out var consumed, out var examined, out var buffer); Assert.Equal(ServerSentEventsMessageParser.ParseResult.Incomplete, parseResult); - pipe.Reader.Advance(consumed, examined); + pipe.Reader.AdvanceTo(consumed, examined); // Send the rest of the data and parse the complete message await pipe.Writer.WriteAsync(Encoding.UTF8.GetBytes(encodedMessagePart2)); @@ -195,8 +196,8 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests var parseResult = parser.ParseMessage(result.Buffer, out var consumed, out var examined, out var message); Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult); Assert.Equal("foo", Encoding.UTF8.GetString(message)); - Assert.Equal(consumed, result.Buffer.Move(result.Buffer.Start, message1.Length)); - pipe.Reader.Advance(consumed, examined); + Assert.Equal(consumed, result.Buffer.GetPosition(result.Buffer.Start, message1.Length)); + pipe.Reader.AdvanceTo(consumed, examined); Assert.Equal(consumed, examined); parser.Reset(); @@ -205,7 +206,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests parseResult = parser.ParseMessage(result.Buffer, out consumed, out examined, out message); Assert.Equal(ServerSentEventsMessageParser.ParseResult.Completed, parseResult); Assert.Equal("bar", Encoding.UTF8.GetString(message)); - pipe.Reader.Advance(consumed, examined); + pipe.Reader.AdvanceTo(consumed, examined); } } @@ -223,7 +224,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.Tests public void ParseMessagesWithMultipleDataLines(string encodedMessage, string expectedMessage) { var buffer = Encoding.UTF8.GetBytes(encodedMessage); - var readableBuffer = new ReadOnlyBuffer(buffer); + var readableBuffer = new ReadOnlyBuffer(buffer); var parser = new ServerSentEventsMessageParser(); var parseResult = parser.ParseMessage(readableBuffer, out var consumed, out var examined, out var message);