diff --git a/src/SignalR/Directory.Build.targets b/src/SignalR/Directory.Build.targets
index a5761bff02..923e244638 100644
--- a/src/SignalR/Directory.Build.targets
+++ b/src/SignalR/Directory.Build.targets
@@ -1,7 +1,5 @@
- $(MicrosoftNETCoreApp22PackageVersion)
-
- 99.9
+ $(MicrosoftNETCoreAppPackageVersion)
diff --git a/src/SignalR/SignalR.sln b/src/SignalR/SignalR.sln
index 7f925af865..6f8900fb5f 100644
--- a/src/SignalR/SignalR.sln
+++ b/src/SignalR/SignalR.sln
@@ -33,8 +33,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.C
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Core", "src\Microsoft.AspNetCore.SignalR.Core\Microsoft.AspNetCore.SignalR.Core.csproj", "{42E76F87-92B6-45AB-BF07-6B811C0F2CAC}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Redis", "src\Microsoft.AspNetCore.SignalR.Redis\Microsoft.AspNetCore.SignalR.Redis.csproj", "{59319B72-38BE-4041-8E5C-FF6938874CE8}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SocialWeather", "samples\SocialWeather\SocialWeather.csproj", "{8D789F94-CB74-45FD-ACE7-92AF6E55042E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Tests", "test\Microsoft.AspNetCore.SignalR.Tests\Microsoft.AspNetCore.SignalR.Tests.csproj", "{1CE2B3BE-056C-41E3-A5F5-6A1EF1D288BA}"
@@ -69,8 +67,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client", "src\Microsoft.AspNetCore.SignalR.Client\Microsoft.AspNetCore.SignalR.Client.csproj", "{BE982591-F4BB-42D9-ABD4-A5D44C65971E}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Redis.Tests", "test\Microsoft.AspNetCore.SignalR.Redis.Tests\Microsoft.AspNetCore.SignalR.Redis.Tests.csproj", "{0B083AE6-86CA-4E0B-AE02-59154D1FD005}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtSample", "samples\JwtSample\JwtSample.csproj", "{6A7491D3-3C97-49BD-A71C-433AED657F30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtClientSample", "samples\JwtClientSample\JwtClientSample.csproj", "{1A953296-E869-4DE2-A693-FD5FCDE27057}"
@@ -113,10 +109,6 @@ Global
{42E76F87-92B6-45AB-BF07-6B811C0F2CAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42E76F87-92B6-45AB-BF07-6B811C0F2CAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42E76F87-92B6-45AB-BF07-6B811C0F2CAC}.Release|Any CPU.Build.0 = Release|Any CPU
- {59319B72-38BE-4041-8E5C-FF6938874CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {59319B72-38BE-4041-8E5C-FF6938874CE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {59319B72-38BE-4041-8E5C-FF6938874CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {59319B72-38BE-4041-8E5C-FF6938874CE8}.Release|Any CPU.Build.0 = Release|Any CPU
{8D789F94-CB74-45FD-ACE7-92AF6E55042E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8D789F94-CB74-45FD-ACE7-92AF6E55042E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D789F94-CB74-45FD-ACE7-92AF6E55042E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -177,10 +169,6 @@ Global
{BE982591-F4BB-42D9-ABD4-A5D44C65971E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE982591-F4BB-42D9-ABD4-A5D44C65971E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE982591-F4BB-42D9-ABD4-A5D44C65971E}.Release|Any CPU.Build.0 = Release|Any CPU
- {0B083AE6-86CA-4E0B-AE02-59154D1FD005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0B083AE6-86CA-4E0B-AE02-59154D1FD005}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0B083AE6-86CA-4E0B-AE02-59154D1FD005}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0B083AE6-86CA-4E0B-AE02-59154D1FD005}.Release|Any CPU.Build.0 = Release|Any CPU
{6A7491D3-3C97-49BD-A71C-433AED657F30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A7491D3-3C97-49BD-A71C-433AED657F30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A7491D3-3C97-49BD-A71C-433AED657F30}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -233,7 +221,6 @@ Global
{C4AEAB04-F341-4539-B6C0-52368FB4BF9E} = {C4BC9889-B49F-41B6-806B-F84941B2549B}
{AAD719D5-5E31-4ED1-A60F-6EB92EFA66D9} = {6A35B453-52EC-48AF-89CA-D4A69800F131}
{42E76F87-92B6-45AB-BF07-6B811C0F2CAC} = {DA69F624-5398-4884-87E4-B816698CDE65}
- {59319B72-38BE-4041-8E5C-FF6938874CE8} = {DA69F624-5398-4884-87E4-B816698CDE65}
{8D789F94-CB74-45FD-ACE7-92AF6E55042E} = {C4BC9889-B49F-41B6-806B-F84941B2549B}
{1CE2B3BE-056C-41E3-A5F5-6A1EF1D288BA} = {6A35B453-52EC-48AF-89CA-D4A69800F131}
{BA99C2A1-48F9-4FA5-B95A-9687A73B7CC9} = {C4BC9889-B49F-41B6-806B-F84941B2549B}
@@ -249,7 +236,6 @@ Global
{B0243F99-2D3F-4CC6-AD71-E3F891B64724} = {DA69F624-5398-4884-87E4-B816698CDE65}
{E081EE41-D95F-4AD2-BC0B-4B562C0A2A47} = {DA69F624-5398-4884-87E4-B816698CDE65}
{BE982591-F4BB-42D9-ABD4-A5D44C65971E} = {DA69F624-5398-4884-87E4-B816698CDE65}
- {0B083AE6-86CA-4E0B-AE02-59154D1FD005} = {6A35B453-52EC-48AF-89CA-D4A69800F131}
{6A7491D3-3C97-49BD-A71C-433AED657F30} = {C4BC9889-B49F-41B6-806B-F84941B2549B}
{1A953296-E869-4DE2-A693-FD5FCDE27057} = {C4BC9889-B49F-41B6-806B-F84941B2549B}
{0A0A6135-EA24-4307-95C2-CE1B7E164A5E} = {6A35B453-52EC-48AF-89CA-D4A69800F131}
diff --git a/src/SignalR/benchmarkapps/BenchmarkServer/BenchmarkServer.csproj b/src/SignalR/benchmarkapps/BenchmarkServer/BenchmarkServer.csproj
index 67a14ce4e7..cc5036ad1a 100644
--- a/src/SignalR/benchmarkapps/BenchmarkServer/BenchmarkServer.csproj
+++ b/src/SignalR/benchmarkapps/BenchmarkServer/BenchmarkServer.csproj
@@ -1,9 +1,7 @@
- netcoreapp2.2
-
- $([System.String]::Copy($(MicrosoftAspNetCoreAllPackageVersion)).Replace('2.2', '1.1'))
+ netcoreapp3.0
@@ -14,7 +12,7 @@
-
+
@@ -23,8 +21,8 @@
-
-
+
+
diff --git a/src/SignalR/benchmarkapps/BenchmarkServer/Startup.cs b/src/SignalR/benchmarkapps/BenchmarkServer/Startup.cs
index 3363b8de58..a9f167cae9 100644
--- a/src/SignalR/benchmarkapps/BenchmarkServer/Startup.cs
+++ b/src/SignalR/benchmarkapps/BenchmarkServer/Startup.cs
@@ -28,7 +28,7 @@ namespace BenchmarkServer
var redisConnectionString = _config["SignalRRedis"];
if (!string.IsNullOrEmpty(redisConnectionString))
{
- signalrBuilder.AddRedis(redisConnectionString);
+ signalrBuilder.AddStackExchangeRedis(redisConnectionString);
}
}
diff --git a/src/SignalR/benchmarkapps/BenchmarkServer/signalr.json b/src/SignalR/benchmarkapps/BenchmarkServer/signalr.json
index 23c53f7088..d8d47bba67 100644
--- a/src/SignalR/benchmarkapps/BenchmarkServer/signalr.json
+++ b/src/SignalR/benchmarkapps/BenchmarkServer/signalr.json
@@ -3,7 +3,7 @@
"Client": "SignalR",
"Source": {
"Repository": "https://github.com/aspnet/SignalR.git",
- "BranchOrCommit": "release/2.2",
+ "BranchOrCommit": "dev",
"Project": "benchmarkapps/BenchmarkServer/BenchmarkServer.csproj"
},
"Connections": 10,
diff --git a/src/SignalR/benchmarkapps/Crankier/Crankier.csproj b/src/SignalR/benchmarkapps/Crankier/Crankier.csproj
index d73db04ff4..d8dbc064ff 100644
--- a/src/SignalR/benchmarkapps/Crankier/Crankier.csproj
+++ b/src/SignalR/benchmarkapps/Crankier/Crankier.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
Microsoft.AspNetCore.SignalR.CranksRevenge
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/DefaultHubDispatcherBenchmark.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/DefaultHubDispatcherBenchmark.cs
index 3da8b6d0cc..d7431ed28b 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/DefaultHubDispatcherBenchmark.cs
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/DefaultHubDispatcherBenchmark.cs
@@ -54,6 +54,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
{
public string Name { get; }
public int Version => 1;
+ public int MinorVersion => 0;
public TransferFormat TransferFormat { get; }
public bool IsVersionSupported(int version)
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/HandshakeProtocolBenchmark.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/HandshakeProtocolBenchmark.cs
new file mode 100644
index 0000000000..2a36dc648e
--- /dev/null
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/HandshakeProtocolBenchmark.cs
@@ -0,0 +1,127 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Buffers;
+using System.Text;
+using BenchmarkDotNet.Attributes;
+using Microsoft.AspNetCore.Internal;
+using Microsoft.AspNetCore.SignalR.Protocol;
+
+namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
+{
+ public class HandshakeProtocolBenchmark
+ {
+ ReadOnlySequence _requestMessage1;
+ ReadOnlySequence _requestMessage2;
+ ReadOnlySequence _requestMessage3;
+ ReadOnlySequence _requestMessage4;
+
+ ReadOnlySequence _responseMessage1;
+ ReadOnlySequence _responseMessage2;
+ ReadOnlySequence _responseMessage3;
+ ReadOnlySequence _responseMessage4;
+ ReadOnlySequence _responseMessage5;
+ ReadOnlySequence _responseMessage6;
+
+ [GlobalSetup]
+ public void GlobalSetup()
+ {
+ _requestMessage1 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"protocol\":\"dummy\",\"version\":1}\u001e"));
+ _requestMessage2 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"protocol\":\"\",\"version\":10}\u001e"));
+ _requestMessage3 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"protocol\":\"\",\"version\":10,\"unknown\":null}\u001e"));
+ _requestMessage4 = new ReadOnlySequence(Encoding.UTF8.GetBytes("42"));
+
+ _responseMessage1 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"error\":\"dummy\"}\u001e"));
+ _responseMessage2 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"error\":\"\"}\u001e"));
+ _responseMessage3 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{}\u001e"));
+ _responseMessage4 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"unknown\":null}\u001e"));
+ _responseMessage5 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"error\":\"\",\"minorVersion\":34}\u001e"));
+ _responseMessage6 = new ReadOnlySequence(Encoding.UTF8.GetBytes("{\"error\":\"flump flump flump\",\"minorVersion\":112}\u001e"));
+ }
+
+ [Benchmark]
+ public void HandShakeWriteResponseEmpty_MemoryBufferWriter()
+ {
+ var writer = MemoryBufferWriter.Get();
+ try
+ {
+ HandshakeProtocol.WriteResponseMessage(HandshakeResponseMessage.Empty, writer);
+ }
+ finally
+ {
+ MemoryBufferWriter.Return(writer);
+ }
+ }
+
+ [Benchmark]
+ public void HandShakeWriteResponse_MemoryBufferWriter()
+ {
+ ReadOnlyMemory result;
+ var memoryBufferWriter = MemoryBufferWriter.Get();
+ try
+ {
+ HandshakeProtocol.WriteResponseMessage(new HandshakeResponseMessage(1), memoryBufferWriter);
+ result = memoryBufferWriter.ToArray();
+ }
+ finally
+ {
+ MemoryBufferWriter.Return(memoryBufferWriter);
+ }
+ }
+
+ [Benchmark]
+ public void HandShakeWriteRequest_MemoryBufferWriter()
+ {
+ var memoryBufferWriter = MemoryBufferWriter.Get();
+ try
+ {
+ HandshakeProtocol.WriteRequestMessage(new HandshakeRequestMessage("json", 1), memoryBufferWriter);
+ }
+ finally
+ {
+ MemoryBufferWriter.Return(memoryBufferWriter);
+ }
+ }
+
+ [Benchmark]
+ public void ParsingHandshakeRequestMessage_ValidMessage1()
+ => HandshakeProtocol.TryParseRequestMessage(ref _requestMessage1, out var deserializedMessage);
+
+ [Benchmark]
+ public void ParsingHandshakeRequestMessage_ValidMessage2()
+ => HandshakeProtocol.TryParseRequestMessage(ref _requestMessage2, out var deserializedMessage);
+
+ [Benchmark]
+ public void ParsingHandshakeRequestMessage_ValidMessage3()
+ => HandshakeProtocol.TryParseRequestMessage(ref _requestMessage3, out var deserializedMessage);
+
+ [Benchmark]
+ public void ParsingHandshakeRequestMessage_NotComplete1()
+ => HandshakeProtocol.TryParseRequestMessage(ref _requestMessage4, out _);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_ValidMessages1()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage1, out var response);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_ValidMessages2()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage2, out var response);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_ValidMessages3()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage3, out var response);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_ValidMessages4()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage4, out var response);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_GivesMinorVersion1()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage5, out var response);
+
+ [Benchmark]
+ public void ParsingHandshakeResponseMessage_GivesMinorVersion2()
+ => HandshakeProtocol.TryParseResponseMessage(ref _responseMessage6, out var response);
+ }
+}
\ No newline at end of file
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj
index 0143f5ffae..4f0e19b517 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/NegotiateProtocolBenchmark.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/NegotiateProtocolBenchmark.cs
index 2e4120e187..909b4217d0 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/NegotiateProtocolBenchmark.cs
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/NegotiateProtocolBenchmark.cs
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.IO;
+using System.Text;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Http.Connections;
@@ -15,6 +16,12 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
private NegotiationResponse _negotiateResponse;
private Stream _stream;
+ private byte[] _responseData1;
+ private byte[] _responseData2;
+ private byte[] _responseData3;
+ private byte[] _responseData4;
+ private byte[] _responseData5;
+
[GlobalSetup]
public void GlobalSetup()
{
@@ -35,6 +42,15 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
}
};
_stream = Stream.Null;
+
+ _responseData1 = Encoding.UTF8.GetBytes("{\"connectionId\":\"123\",\"availableTransports\":[]}");
+ _responseData2 = Encoding.UTF8.GetBytes("{\"url\": \"http://foo.com/chat\"}");
+ _responseData3 = Encoding.UTF8.GetBytes("{\"url\": \"http://foo.com/chat\", \"accessToken\": \"token\"}");
+ _responseData4 = Encoding.UTF8.GetBytes("{\"connectionId\":\"123\",\"availableTransports\":[{\"transport\":\"test\",\"transferFormats\":[]}]}");
+
+ var writer = new MemoryBufferWriter();
+ NegotiateProtocol.WriteResponse(_negotiateResponse, writer);
+ _responseData5 = writer.ToArray();
}
[Benchmark]
@@ -51,5 +67,25 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
writer.Reset();
}
}
+
+ [Benchmark]
+ public void ParsingNegotiateResponseMessageSuccessForValid1()
+ => NegotiateProtocol.ParseResponse(new MemoryStream(_responseData1));
+
+ [Benchmark]
+ public void ParsingNegotiateResponseMessageSuccessForValid2()
+ => NegotiateProtocol.ParseResponse(new MemoryStream(_responseData2));
+
+ [Benchmark]
+ public void ParsingNegotiateResponseMessageSuccessForValid3()
+ => NegotiateProtocol.ParseResponse(new MemoryStream(_responseData3));
+
+ [Benchmark]
+ public void ParsingNegotiateResponseMessageSuccessForValid4()
+ => NegotiateProtocol.ParseResponse(new MemoryStream(_responseData4));
+
+ [Benchmark]
+ public void ParsingNegotiateResponseMessageSuccessForValid5()
+ => NegotiateProtocol.ParseResponse(new MemoryStream(_responseData5));
}
-}
+}
\ No newline at end of file
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisHubLifetimeManagerBenchmark.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisHubLifetimeManagerBenchmark.cs
index 852fbdfa3c..606c53673c 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisHubLifetimeManagerBenchmark.cs
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisHubLifetimeManagerBenchmark.cs
@@ -178,6 +178,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
public string Name => _name;
public int Version => _innerProtocol.Version;
+ public int MinorVersion => _innerProtocol.MinorVersion;
public TransferFormat TransferFormat => _innerProtocol.TransferFormat;
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisProtocolBenchmark.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisProtocolBenchmark.cs
index f5e02e489b..c87d0e5226 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisProtocolBenchmark.cs
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/RedisProtocolBenchmark.cs
@@ -126,6 +126,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
public string Name { get; }
public int Version => 1;
+ public int MinorVersion => 0;
public TransferFormat TransferFormat => TransferFormat.Text;
diff --git a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/TestBinder.cs b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/TestBinder.cs
index 1e25041d4f..bbcb8a1bde 100644
--- a/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/TestBinder.cs
+++ b/src/SignalR/benchmarks/Microsoft.AspNetCore.SignalR.Microbenchmarks/TestBinder.cs
@@ -59,5 +59,10 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
}
throw new InvalidOperationException("Unexpected binder call");
}
+
+ public Type GetStreamItemType(string streamId)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/SignalR/build/dependencies.props b/src/SignalR/build/dependencies.props
index 361fce7a5f..719ea4d5a2 100644
--- a/src/SignalR/build/dependencies.props
+++ b/src/SignalR/build/dependencies.props
@@ -5,74 +5,73 @@
0.10.13
3.1.0
- 2.2.0-rtm-181106-13
- 2.2.0-preview2-20181011.2
+ 3.0.0-preview-181113-11
+ 3.0.0-build-20181114.5
1.7.3.4
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-35661
- 2.2.0-preview3-35457
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-35661
- 4.5.0
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-35661
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-181106-13
- 2.2.0-rtm-27105-02
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-preview-181113-11
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-alpha1-10742
+ 3.0.0-preview-181113-11
+ 3.0.0-alpha1-10742
+ 4.6.0-preview1-26907-04
+ 3.0.0-preview-181109-02
+ 3.0.0-preview-181109-02
+ 3.0.0-preview-181109-02
+ 3.0.0-alpha1-10727
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview-181113-11
+ 3.0.0-preview1-26907-05
15.6.1
4.10.0
2.0.3
11.0.2
2.0.513
- 1.2.6
- 4.5.0
- 4.5.2
- 4.5.1
- 4.5.0
+ 4.6.0-preview1-26907-04
+ 4.6.0-preview1-26907-04
+ 4.6.0-preview1-26717-04
+ 4.6.0-preview1-26907-04
3.1.1
4.3.0
- 4.5.1
- 4.5.0
- 4.5.0
- 4.5.1
+ 4.6.0-preview1-26907-04
+ 4.6.0-preview1-26907-04
+ 4.6.0-preview1-26907-04
+ 4.6.0-preview1-26907-04
2.3.1
2.3.1
2.3.1
diff --git a/src/SignalR/build/publish-apps.ps1 b/src/SignalR/build/publish-apps.ps1
index a2d0062e79..6a45f50a0f 100644
--- a/src/SignalR/build/publish-apps.ps1
+++ b/src/SignalR/build/publish-apps.ps1
@@ -1,4 +1,4 @@
-param($RootDirectory = (Get-Location), $Framework = "netcoreapp2.2", $Runtime = "win7-x64", $CommitHash, $BranchName, $BuildNumber)
+param($RootDirectory = (Get-Location), $Framework = "netcoreapp3.0", $Runtime = "win7-x64", $CommitHash, $BranchName, $BuildNumber)
# De-Powershell the path
$RootDirectory = (Convert-Path $RootDirectory)
@@ -45,4 +45,4 @@ $Apps.Keys | ForEach-Object {
} finally {
Remove-Item $MetadataPath
}
-}
\ No newline at end of file
+}
diff --git a/src/SignalR/build/repo.props b/src/SignalR/build/repo.props
index fc909de537..16207d928b 100644
--- a/src/SignalR/build/repo.props
+++ b/src/SignalR/build/repo.props
@@ -15,11 +15,10 @@
Internal.AspNetCore.Universe.Lineup
- 2.2.0-*
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json
-
+
diff --git a/src/SignalR/clients/java/signalr/build.gradle b/src/SignalR/clients/java/signalr/build.gradle
index 70eaa9fc45..20c3661bda 100644
--- a/src/SignalR/clients/java/signalr/build.gradle
+++ b/src/SignalR/clients/java/signalr/build.gradle
@@ -35,7 +35,7 @@ dependencies {
testCompile 'org.slf4j:slf4j-jdk14:1.7.25'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
- api 'io.reactivex.rxjava2:rxjava:2.2.2'
+ api 'io.reactivex.rxjava2:rxjava:2.2.3'
implementation 'org.slf4j:slf4j-api:1.7.25'
}
diff --git a/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/CancelInvocationMessage.java b/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/CancelInvocationMessage.java
new file mode 100644
index 0000000000..096c49faf0
--- /dev/null
+++ b/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/CancelInvocationMessage.java
@@ -0,0 +1,18 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+package com.microsoft.signalr;
+
+final class CancelInvocationMessage extends HubMessage {
+ private final int type = HubMessageType.CANCEL_INVOCATION.value;
+ private final String invocationId;
+
+ public CancelInvocationMessage(String invocationId) {
+ this.invocationId = invocationId;
+ }
+
+ @Override
+ public HubMessageType getMessageType() {
+ return HubMessageType.CANCEL_INVOCATION;
+ }
+}
diff --git a/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java b/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java
index 485137d0a6..5b255ec9bd 100644
--- a/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java
+++ b/src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java
@@ -21,9 +21,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.reactivex.Completable;
+import io.reactivex.Observable;
import io.reactivex.Single;
-import io.reactivex.subjects.CompletableSubject;
-import io.reactivex.subjects.SingleSubject;
+import io.reactivex.subjects.*;
/**
* A connection used to invoke hub methods on a SignalR Server.
@@ -58,7 +58,6 @@ public class HubConnection {
private long handshakeResponseTimeout = 15*1000;
private final Logger logger = LoggerFactory.getLogger(HubConnection.class);
-
/**
* Sets the server timeout interval for the connection.
*
@@ -202,8 +201,17 @@ public class HubConnection {
}
irq.complete(completionMessage);
break;
- case STREAM_INVOCATION:
case STREAM_ITEM:
+ StreamItem streamItem = (StreamItem)message;
+ InvocationRequest streamInvocationRequest = connectionState.getInvocation(streamItem.getInvocationId());
+ if (streamInvocationRequest == null) {
+ logger.warn("Dropped unsolicited Completion message for invocation '{}'.", streamItem.getInvocationId());
+ continue;
+ }
+
+ streamInvocationRequest.addItem(streamItem);
+ break;
+ case STREAM_INVOCATION:
case CANCEL_INVOCATION:
logger.error("This client does not support {} messages.", message.getMessageType());
@@ -481,7 +489,7 @@ public class HubConnection {
// forward the invocation result or error to the user
// run continuations on a separate thread
- Single