From d55ebfeee0eab02b4a86bc47434d5dc3f899d109 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Wed, 24 May 2017 07:09:46 -0700 Subject: [PATCH] Split http and non-http layers (#487) * Split http and non-http layers - This change introduces Microsoft.AspNetCore.SignalR.Http and Microsoft.AspNetCore.Sockets.Http which expose extension methods on IAppBuilder for wiring up a sockets and signalr pipeline. --- SignalR.sln | 14 ++++++++++ ...soft.AspNetCore.SignalR.Test.Server.csproj | 2 +- samples/ChatSample/ChatSample.csproj | 2 +- samples/SocialWeather/SocialWeather.csproj | 2 +- samples/SocketsSample/SocketsSample.csproj | 2 ++ .../HubRouteBuilder.cs | 22 ++++++++++++++++ .../Microsoft.AspNetCore.SignalR.Http.csproj | 18 +++++++++++++ .../SignalRAppBuilderExtensions.cs | 16 ------------ .../SignalRDependencyInjectionExtensions.cs | 16 ++++++++++++ .../Microsoft.AspNetCore.SignalR.Redis.csproj | 1 + .../HubEndPoint.cs | 5 ++-- .../Microsoft.AspNetCore.SignalR.csproj | 4 ++- .../SignalRDependencyInjectionExtensions.cs | 4 +-- .../SignalRSocketBuilderExtensions.cs | 20 ++++++++++++++ .../ConnectionList.cs | 6 ++--- .../SocketBuilderExtensions.cs | 11 ++++++++ .../ConnectionMetadataNames.cs | 0 .../HttpConnectionDispatcher.cs | 0 .../HttpSocketOptions.cs | 0 .../Internal/AuthorizeHelper.cs | 0 .../Internal/AwaitableThreadPool.cs | 0 .../Microsoft.AspNetCore.Sockets.Http.csproj | 25 ++++++++++++++++++ .../SocketRouteBuilder.cs} | 25 ++---------------- .../SocketsAppBuilderExtensions.cs | 26 +++++++++++++++++++ .../SocketsDependencyInjectionExtensions.cs | 18 +++++++++++++ .../Transports/IHttpTransport.cs | 0 .../Transports/LongPollingTransport.cs | 0 .../Transports/ServerSentEventsTransport.cs | 0 .../Transports/WebSocketsTransport.cs | 0 .../WebSocketOptions.cs | 0 .../{Internal => }/ConnectionState.cs | 0 .../EndPoint.cs | 1 - .../Microsoft.AspNetCore.Sockets.csproj | 8 +++--- ...tensions.cs => SocketBuilderExtensions.cs} | 4 +-- .../SocketsDependencyInjectionExtensions.cs | 4 +-- ...Core.SignalR.Client.FunctionalTests.csproj | 2 +- .../Microsoft.AspNetCore.SignalR.Tests.csproj | 4 +-- .../Microsoft.AspNetCore.Sockets.Tests.csproj | 2 +- 38 files changed, 196 insertions(+), 68 deletions(-) create mode 100644 src/Microsoft.AspNetCore.SignalR.Http/HubRouteBuilder.cs create mode 100644 src/Microsoft.AspNetCore.SignalR.Http/Microsoft.AspNetCore.SignalR.Http.csproj rename src/{Microsoft.AspNetCore.SignalR => Microsoft.AspNetCore.SignalR.Http}/SignalRAppBuilderExtensions.cs (59%) create mode 100644 src/Microsoft.AspNetCore.SignalR.Http/SignalRDependencyInjectionExtensions.cs create mode 100644 src/Microsoft.AspNetCore.SignalR/SignalRSocketBuilderExtensions.cs rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Abstractions}/ConnectionList.cs (89%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/ConnectionMetadataNames.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/HttpConnectionDispatcher.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/HttpSocketOptions.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Internal/AuthorizeHelper.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Internal/AwaitableThreadPool.cs (100%) create mode 100644 src/Microsoft.AspNetCore.Sockets.Http/Microsoft.AspNetCore.Sockets.Http.csproj rename src/{Microsoft.AspNetCore.Sockets/HttpDispatcherAppBuilderExtensions.cs => Microsoft.AspNetCore.Sockets.Http/SocketRouteBuilder.cs} (57%) create mode 100644 src/Microsoft.AspNetCore.Sockets.Http/SocketsAppBuilderExtensions.cs create mode 100644 src/Microsoft.AspNetCore.Sockets.Http/SocketsDependencyInjectionExtensions.cs rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Transports/IHttpTransport.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Transports/LongPollingTransport.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Transports/ServerSentEventsTransport.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/Transports/WebSocketsTransport.cs (100%) rename src/{Microsoft.AspNetCore.Sockets => Microsoft.AspNetCore.Sockets.Http}/WebSocketOptions.cs (100%) rename src/Microsoft.AspNetCore.Sockets/{Internal => }/ConnectionState.cs (100%) rename src/{Microsoft.AspNetCore.Sockets.Abstractions => Microsoft.AspNetCore.Sockets}/EndPoint.cs (90%) rename src/Microsoft.AspNetCore.Sockets/{HttpSocketBuilderExtensions.cs => SocketBuilderExtensions.cs} (87%) diff --git a/SignalR.sln b/SignalR.sln index 1c7fe2eabf..b3da7f86f0 100644 --- a/SignalR.sln +++ b/SignalR.sln @@ -78,6 +78,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Signal EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Sockets.Abstractions", "src\Microsoft.AspNetCore.Sockets.Abstractions\Microsoft.AspNetCore.Sockets.Abstractions.csproj", "{F2E4FBD6-9AEA-4A82-BAC9-3FAACA677DF8}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Http", "src\Microsoft.AspNetCore.SignalR.Http\Microsoft.AspNetCore.SignalR.Http.csproj", "{FD80BB0F-0876-4F11-8D84-6657C8EF84CA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Sockets.Http", "src\Microsoft.AspNetCore.Sockets.Http\Microsoft.AspNetCore.Sockets.Http.csproj", "{9E403E93-3284-486F-9A5F-1E15FCE426A5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -192,6 +196,14 @@ Global {F2E4FBD6-9AEA-4A82-BAC9-3FAACA677DF8}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2E4FBD6-9AEA-4A82-BAC9-3FAACA677DF8}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2E4FBD6-9AEA-4A82-BAC9-3FAACA677DF8}.Release|Any CPU.Build.0 = Release|Any CPU + {FD80BB0F-0876-4F11-8D84-6657C8EF84CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD80BB0F-0876-4F11-8D84-6657C8EF84CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD80BB0F-0876-4F11-8D84-6657C8EF84CA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD80BB0F-0876-4F11-8D84-6657C8EF84CA}.Release|Any CPU.Build.0 = Release|Any CPU + {9E403E93-3284-486F-9A5F-1E15FCE426A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E403E93-3284-486F-9A5F-1E15FCE426A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E403E93-3284-486F-9A5F-1E15FCE426A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E403E93-3284-486F-9A5F-1E15FCE426A5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -225,5 +237,7 @@ Global {96771B3F-4D18-41A7-A75B-FF38E76AAC89} = {6A35B453-52EC-48AF-89CA-D4A69800F131} {75E342F6-5445-4E7E-9143-6D9AE62C2B1E} = {6A35B453-52EC-48AF-89CA-D4A69800F131} {F2E4FBD6-9AEA-4A82-BAC9-3FAACA677DF8} = {DA69F624-5398-4884-87E4-B816698CDE65} + {FD80BB0F-0876-4F11-8D84-6657C8EF84CA} = {DA69F624-5398-4884-87E4-B816698CDE65} + {9E403E93-3284-486F-9A5F-1E15FCE426A5} = {DA69F624-5398-4884-87E4-B816698CDE65} EndGlobalSection EndGlobal diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Test.Server/Microsoft.AspNetCore.SignalR.Test.Server.csproj b/client-ts/Microsoft.AspNetCore.SignalR.Test.Server/Microsoft.AspNetCore.SignalR.Test.Server.csproj index 85a9bfac17..d2b041d8c2 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Test.Server/Microsoft.AspNetCore.SignalR.Test.Server.csproj +++ b/client-ts/Microsoft.AspNetCore.SignalR.Test.Server/Microsoft.AspNetCore.SignalR.Test.Server.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/ChatSample/ChatSample.csproj b/samples/ChatSample/ChatSample.csproj index 30024a8cc9..756d0b99f6 100644 --- a/samples/ChatSample/ChatSample.csproj +++ b/samples/ChatSample/ChatSample.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/SocialWeather/SocialWeather.csproj b/samples/SocialWeather/SocialWeather.csproj index 8cde81d0af..a760339bd9 100644 --- a/samples/SocialWeather/SocialWeather.csproj +++ b/samples/SocialWeather/SocialWeather.csproj @@ -9,7 +9,7 @@ - + diff --git a/samples/SocketsSample/SocketsSample.csproj b/samples/SocketsSample/SocketsSample.csproj index 7949e296d7..9db7429cfe 100644 --- a/samples/SocketsSample/SocketsSample.csproj +++ b/samples/SocketsSample/SocketsSample.csproj @@ -12,6 +12,8 @@ + + diff --git a/src/Microsoft.AspNetCore.SignalR.Http/HubRouteBuilder.cs b/src/Microsoft.AspNetCore.SignalR.Http/HubRouteBuilder.cs new file mode 100644 index 0000000000..ae134a4251 --- /dev/null +++ b/src/Microsoft.AspNetCore.SignalR.Http/HubRouteBuilder.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Sockets; + +namespace Microsoft.AspNetCore.SignalR +{ + public class HubRouteBuilder + { + private readonly SocketRouteBuilder _routes; + + public HubRouteBuilder(SocketRouteBuilder routes) + { + _routes = routes; + } + + public void MapHub(string path) where THub : Hub + { + _routes.MapSocket(path, builder => + { + builder.UseHub(); + }); + } + } +} diff --git a/src/Microsoft.AspNetCore.SignalR.Http/Microsoft.AspNetCore.SignalR.Http.csproj b/src/Microsoft.AspNetCore.SignalR.Http/Microsoft.AspNetCore.SignalR.Http.csproj new file mode 100644 index 0000000000..09690f99e4 --- /dev/null +++ b/src/Microsoft.AspNetCore.SignalR.Http/Microsoft.AspNetCore.SignalR.Http.csproj @@ -0,0 +1,18 @@ + + + + + Components for providing real-time bi-directional communication across the Web. + netcoreapp2.0 + $(NoWarn);CS1591 + true + aspnetcore;signalr + false + + + + + + + + diff --git a/src/Microsoft.AspNetCore.SignalR/SignalRAppBuilderExtensions.cs b/src/Microsoft.AspNetCore.SignalR.Http/SignalRAppBuilderExtensions.cs similarity index 59% rename from src/Microsoft.AspNetCore.SignalR/SignalRAppBuilderExtensions.cs rename to src/Microsoft.AspNetCore.SignalR.Http/SignalRAppBuilderExtensions.cs index 00cca9cdbd..627f3ee376 100644 --- a/src/Microsoft.AspNetCore.SignalR/SignalRAppBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.SignalR.Http/SignalRAppBuilderExtensions.cs @@ -10,7 +10,6 @@ namespace Microsoft.AspNetCore.Builder { public static IApplicationBuilder UseSignalR(this IApplicationBuilder app, Action configure) { - // REVIEW: Should we discover hubs? app.UseSockets(routes => { configure(new HubRouteBuilder(routes)); @@ -19,19 +18,4 @@ namespace Microsoft.AspNetCore.Builder return app; } } - - public class HubRouteBuilder - { - private readonly SocketRouteBuilder _routes; - - public HubRouteBuilder(SocketRouteBuilder routes) - { - _routes = routes; - } - - public void MapHub(string path) where THub : Hub - { - _routes.MapEndPoint>(path); - } - } } diff --git a/src/Microsoft.AspNetCore.SignalR.Http/SignalRDependencyInjectionExtensions.cs b/src/Microsoft.AspNetCore.SignalR.Http/SignalRDependencyInjectionExtensions.cs new file mode 100644 index 0000000000..83cc586f05 --- /dev/null +++ b/src/Microsoft.AspNetCore.SignalR.Http/SignalRDependencyInjectionExtensions.cs @@ -0,0 +1,16 @@ +// 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 Microsoft.AspNetCore.SignalR; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class SignalRDependencyInjectionExtensions + { + public static ISignalRBuilder AddSignalR(this IServiceCollection services) + { + services.AddSockets(); + return services.AddSignalRCore(); + } + } +} diff --git a/src/Microsoft.AspNetCore.SignalR.Redis/Microsoft.AspNetCore.SignalR.Redis.csproj b/src/Microsoft.AspNetCore.SignalR.Redis/Microsoft.AspNetCore.SignalR.Redis.csproj index 551cab5dd5..732ebf3d17 100644 --- a/src/Microsoft.AspNetCore.SignalR.Redis/Microsoft.AspNetCore.SignalR.Redis.csproj +++ b/src/Microsoft.AspNetCore.SignalR.Redis/Microsoft.AspNetCore.SignalR.Redis.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Microsoft.AspNetCore.SignalR/HubEndPoint.cs b/src/Microsoft.AspNetCore.SignalR/HubEndPoint.cs index 65c3f14e7f..f16170ff78 100644 --- a/src/Microsoft.AspNetCore.SignalR/HubEndPoint.cs +++ b/src/Microsoft.AspNetCore.SignalR/HubEndPoint.cs @@ -13,7 +13,6 @@ using Microsoft.AspNetCore.Sockets; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; namespace Microsoft.AspNetCore.SignalR { @@ -29,7 +28,7 @@ namespace Microsoft.AspNetCore.SignalR } } - public class HubEndPoint : EndPoint, IInvocationBinder where THub : Hub + public class HubEndPoint : IInvocationBinder where THub : Hub { private readonly Dictionary _methods = new Dictionary(StringComparer.OrdinalIgnoreCase); @@ -54,7 +53,7 @@ namespace Microsoft.AspNetCore.SignalR DiscoverHubMethods(); } - public override async Task OnConnectedAsync(ConnectionContext connection) + public async Task OnConnectedAsync(ConnectionContext connection) { try { diff --git a/src/Microsoft.AspNetCore.SignalR/Microsoft.AspNetCore.SignalR.csproj b/src/Microsoft.AspNetCore.SignalR/Microsoft.AspNetCore.SignalR.csproj index aedd17a019..c159b5707b 100644 --- a/src/Microsoft.AspNetCore.SignalR/Microsoft.AspNetCore.SignalR.csproj +++ b/src/Microsoft.AspNetCore.SignalR/Microsoft.AspNetCore.SignalR.csproj @@ -12,8 +12,10 @@ - + + + diff --git a/src/Microsoft.AspNetCore.SignalR/SignalRDependencyInjectionExtensions.cs b/src/Microsoft.AspNetCore.SignalR/SignalRDependencyInjectionExtensions.cs index 71a5f022ef..8fe8166b85 100644 --- a/src/Microsoft.AspNetCore.SignalR/SignalRDependencyInjectionExtensions.cs +++ b/src/Microsoft.AspNetCore.SignalR/SignalRDependencyInjectionExtensions.cs @@ -8,15 +8,13 @@ namespace Microsoft.Extensions.DependencyInjection { public static class SignalRDependencyInjectionExtensions { - public static ISignalRBuilder AddSignalR(this IServiceCollection services) + public static ISignalRBuilder AddSignalRCore(this IServiceCollection services) { - services.AddSockets(); services.AddSingleton(typeof(HubLifetimeManager<>), typeof(DefaultHubLifetimeManager<>)); services.AddSingleton(typeof(IHubProtocolResolver), typeof(DefaultHubProtocolResolver)); services.AddSingleton(typeof(IHubContext<>), typeof(HubContext<>)); services.AddSingleton(typeof(HubEndPoint<>), typeof(HubEndPoint<>)); services.AddScoped(typeof(IHubActivator<,>), typeof(DefaultHubActivator<,>)); - services.AddRouting(); return new SignalRBuilder(services); } diff --git a/src/Microsoft.AspNetCore.SignalR/SignalRSocketBuilderExtensions.cs b/src/Microsoft.AspNetCore.SignalR/SignalRSocketBuilderExtensions.cs new file mode 100644 index 0000000000..9a5676970b --- /dev/null +++ b/src/Microsoft.AspNetCore.SignalR/SignalRSocketBuilderExtensions.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.AspNetCore.Sockets; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.SignalR +{ + public static class SignalRSocketBuilderExtensions + { + public static ISocketBuilder UseHub(this ISocketBuilder socketBuilder) where THub : Hub + { + return socketBuilder.Run(connection => + { + var endpoint = socketBuilder.ApplicationServices.GetRequiredService>(); + return endpoint.OnConnectedAsync(connection); + }); + } + } +} diff --git a/src/Microsoft.AspNetCore.Sockets/ConnectionList.cs b/src/Microsoft.AspNetCore.Sockets.Abstractions/ConnectionList.cs similarity index 89% rename from src/Microsoft.AspNetCore.Sockets/ConnectionList.cs rename to src/Microsoft.AspNetCore.Sockets.Abstractions/ConnectionList.cs index 323c0e442e..0b9b799406 100644 --- a/src/Microsoft.AspNetCore.Sockets/ConnectionList.cs +++ b/src/Microsoft.AspNetCore.Sockets.Abstractions/ConnectionList.cs @@ -16,8 +16,7 @@ namespace Microsoft.AspNetCore.Sockets { get { - ConnectionContext connection; - if (_connections.TryGetValue(connectionId, out connection)) + if (_connections.TryGetValue(connectionId, out var connection)) { return connection; } @@ -34,8 +33,7 @@ namespace Microsoft.AspNetCore.Sockets public void Remove(ConnectionContext connection) { - ConnectionContext dummy; - _connections.TryRemove(connection.ConnectionId, out dummy); + _connections.TryRemove(connection.ConnectionId, out var dummy); } public IEnumerator GetEnumerator() diff --git a/src/Microsoft.AspNetCore.Sockets.Abstractions/SocketBuilderExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Abstractions/SocketBuilderExtensions.cs index 82635ec4da..e8fe0db519 100644 --- a/src/Microsoft.AspNetCore.Sockets.Abstractions/SocketBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets.Abstractions/SocketBuilderExtensions.cs @@ -19,5 +19,16 @@ namespace Microsoft.AspNetCore.Sockets }; }); } + + public static ISocketBuilder Run(this ISocketBuilder socketBuilder, Func middleware) + { + return socketBuilder.Use(next => + { + return context => + { + return middleware(context); + }; + }); + } } } diff --git a/src/Microsoft.AspNetCore.Sockets/ConnectionMetadataNames.cs b/src/Microsoft.AspNetCore.Sockets.Http/ConnectionMetadataNames.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/ConnectionMetadataNames.cs rename to src/Microsoft.AspNetCore.Sockets.Http/ConnectionMetadataNames.cs diff --git a/src/Microsoft.AspNetCore.Sockets/HttpConnectionDispatcher.cs b/src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/HttpConnectionDispatcher.cs rename to src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs diff --git a/src/Microsoft.AspNetCore.Sockets/HttpSocketOptions.cs b/src/Microsoft.AspNetCore.Sockets.Http/HttpSocketOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/HttpSocketOptions.cs rename to src/Microsoft.AspNetCore.Sockets.Http/HttpSocketOptions.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Internal/AuthorizeHelper.cs b/src/Microsoft.AspNetCore.Sockets.Http/Internal/AuthorizeHelper.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Internal/AuthorizeHelper.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Internal/AuthorizeHelper.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Internal/AwaitableThreadPool.cs b/src/Microsoft.AspNetCore.Sockets.Http/Internal/AwaitableThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Internal/AwaitableThreadPool.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Internal/AwaitableThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Sockets.Http/Microsoft.AspNetCore.Sockets.Http.csproj b/src/Microsoft.AspNetCore.Sockets.Http/Microsoft.AspNetCore.Sockets.Http.csproj new file mode 100644 index 0000000000..de6c20c504 --- /dev/null +++ b/src/Microsoft.AspNetCore.Sockets.Http/Microsoft.AspNetCore.Sockets.Http.csproj @@ -0,0 +1,25 @@ + + + + + + Components for providing real-time bi-directional communication across the Web. + netcoreapp2.0 + $(NoWarn);CS1591 + true + aspnetcore;signalr + false + + + + + + + + + + + + + + diff --git a/src/Microsoft.AspNetCore.Sockets/HttpDispatcherAppBuilderExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Http/SocketRouteBuilder.cs similarity index 57% rename from src/Microsoft.AspNetCore.Sockets/HttpDispatcherAppBuilderExtensions.cs rename to src/Microsoft.AspNetCore.Sockets.Http/SocketRouteBuilder.cs index 732b0050af..1654fa3e70 100644 --- a/src/Microsoft.AspNetCore.Sockets/HttpDispatcherAppBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets.Http/SocketRouteBuilder.cs @@ -1,29 +1,8 @@ -// 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; using Microsoft.AspNetCore.Routing; -using Microsoft.AspNetCore.Sockets; -using Microsoft.Extensions.DependencyInjection; -namespace Microsoft.AspNetCore.Builder +namespace Microsoft.AspNetCore.Sockets { - public static class HttpDispatcherAppBuilderExtensions - { - public static IApplicationBuilder UseSockets(this IApplicationBuilder app, Action callback) - { - var dispatcher = app.ApplicationServices.GetRequiredService(); - - var routes = new RouteBuilder(app); - - callback(new SocketRouteBuilder(routes, dispatcher)); - - app.UseWebSocketConnections(); - app.UseRouter(routes.Build()); - return app; - } - } - public class SocketRouteBuilder { private readonly HttpConnectionDispatcher _dispatcher; diff --git a/src/Microsoft.AspNetCore.Sockets.Http/SocketsAppBuilderExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Http/SocketsAppBuilderExtensions.cs new file mode 100644 index 0000000000..87e01420ab --- /dev/null +++ b/src/Microsoft.AspNetCore.Sockets.Http/SocketsAppBuilderExtensions.cs @@ -0,0 +1,26 @@ +// 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 Microsoft.AspNetCore.Routing; +using Microsoft.AspNetCore.Sockets; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Builder +{ + public static class SocketsAppBuilderExtensions + { + public static IApplicationBuilder UseSockets(this IApplicationBuilder app, Action callback) + { + var dispatcher = app.ApplicationServices.GetRequiredService(); + + var routes = new RouteBuilder(app); + + callback(new SocketRouteBuilder(routes, dispatcher)); + + app.UseWebSocketConnections(); + app.UseRouter(routes.Build()); + return app; + } + } +} diff --git a/src/Microsoft.AspNetCore.Sockets.Http/SocketsDependencyInjectionExtensions.cs b/src/Microsoft.AspNetCore.Sockets.Http/SocketsDependencyInjectionExtensions.cs new file mode 100644 index 0000000000..e7d451b980 --- /dev/null +++ b/src/Microsoft.AspNetCore.Sockets.Http/SocketsDependencyInjectionExtensions.cs @@ -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. + +using Microsoft.AspNetCore.Sockets; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class SocketsDependencyInjectionExtensions + { + public static IServiceCollection AddSockets(this IServiceCollection services) + { + services.AddRouting(); + services.TryAddSingleton(); + return services.AddSocketsCore(); + } + } +} diff --git a/src/Microsoft.AspNetCore.Sockets/Transports/IHttpTransport.cs b/src/Microsoft.AspNetCore.Sockets.Http/Transports/IHttpTransport.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Transports/IHttpTransport.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Transports/IHttpTransport.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Transports/LongPollingTransport.cs b/src/Microsoft.AspNetCore.Sockets.Http/Transports/LongPollingTransport.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Transports/LongPollingTransport.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Transports/LongPollingTransport.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Transports/ServerSentEventsTransport.cs b/src/Microsoft.AspNetCore.Sockets.Http/Transports/ServerSentEventsTransport.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Transports/ServerSentEventsTransport.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Transports/ServerSentEventsTransport.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Transports/WebSocketsTransport.cs b/src/Microsoft.AspNetCore.Sockets.Http/Transports/WebSocketsTransport.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Transports/WebSocketsTransport.cs rename to src/Microsoft.AspNetCore.Sockets.Http/Transports/WebSocketsTransport.cs diff --git a/src/Microsoft.AspNetCore.Sockets/WebSocketOptions.cs b/src/Microsoft.AspNetCore.Sockets.Http/WebSocketOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/WebSocketOptions.cs rename to src/Microsoft.AspNetCore.Sockets.Http/WebSocketOptions.cs diff --git a/src/Microsoft.AspNetCore.Sockets/Internal/ConnectionState.cs b/src/Microsoft.AspNetCore.Sockets/ConnectionState.cs similarity index 100% rename from src/Microsoft.AspNetCore.Sockets/Internal/ConnectionState.cs rename to src/Microsoft.AspNetCore.Sockets/ConnectionState.cs diff --git a/src/Microsoft.AspNetCore.Sockets.Abstractions/EndPoint.cs b/src/Microsoft.AspNetCore.Sockets/EndPoint.cs similarity index 90% rename from src/Microsoft.AspNetCore.Sockets.Abstractions/EndPoint.cs rename to src/Microsoft.AspNetCore.Sockets/EndPoint.cs index 9108e43d83..d23fbeddf4 100644 --- a/src/Microsoft.AspNetCore.Sockets.Abstractions/EndPoint.cs +++ b/src/Microsoft.AspNetCore.Sockets/EndPoint.cs @@ -8,7 +8,6 @@ namespace Microsoft.AspNetCore.Sockets /// /// Represents an end point that multiple connections connect to. For HTTP, endpoints are URLs, for non HTTP it can be a TCP listener (or similar) /// - // REVIEW: This doesn't have any members any more... marker interface? Still even necessary? public abstract class EndPoint { /// diff --git a/src/Microsoft.AspNetCore.Sockets/Microsoft.AspNetCore.Sockets.csproj b/src/Microsoft.AspNetCore.Sockets/Microsoft.AspNetCore.Sockets.csproj index 4cceabdecd..5196e36366 100644 --- a/src/Microsoft.AspNetCore.Sockets/Microsoft.AspNetCore.Sockets.csproj +++ b/src/Microsoft.AspNetCore.Sockets/Microsoft.AspNetCore.Sockets.csproj @@ -14,11 +14,9 @@ - - - - - + + + diff --git a/src/Microsoft.AspNetCore.Sockets/HttpSocketBuilderExtensions.cs b/src/Microsoft.AspNetCore.Sockets/SocketBuilderExtensions.cs similarity index 87% rename from src/Microsoft.AspNetCore.Sockets/HttpSocketBuilderExtensions.cs rename to src/Microsoft.AspNetCore.Sockets/SocketBuilderExtensions.cs index 9aa946ebe3..29be9b8a8b 100644 --- a/src/Microsoft.AspNetCore.Sockets/HttpSocketBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets/SocketBuilderExtensions.cs @@ -8,12 +8,12 @@ using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Sockets { - public static class HttpSocketBuilderExtensions + public static class SocketBuilderExtensions { public static ISocketBuilder UseEndPoint(this ISocketBuilder socketBuilder) where TEndPoint : EndPoint { // This is a terminal middleware, so there's no need to use the 'next' parameter - return socketBuilder.Use((connection, _) => + return socketBuilder.Run(connection => { var endpoint = socketBuilder.ApplicationServices.GetRequiredService(); return endpoint.OnConnectedAsync(connection); diff --git a/src/Microsoft.AspNetCore.Sockets/SocketsDependencyInjectionExtensions.cs b/src/Microsoft.AspNetCore.Sockets/SocketsDependencyInjectionExtensions.cs index 95d1fb7256..85c1c2efd0 100644 --- a/src/Microsoft.AspNetCore.Sockets/SocketsDependencyInjectionExtensions.cs +++ b/src/Microsoft.AspNetCore.Sockets/SocketsDependencyInjectionExtensions.cs @@ -9,12 +9,10 @@ namespace Microsoft.Extensions.DependencyInjection { public static class SocketsDependencyInjectionExtensions { - public static IServiceCollection AddSockets(this IServiceCollection services) + public static IServiceCollection AddSocketsCore(this IServiceCollection services) { - services.AddRouting(); services.TryAddSingleton(); services.TryAddEnumerable(ServiceDescriptor.Singleton()); - services.TryAddSingleton(); return services; } } diff --git a/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj b/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj index d55d759ce5..14e2694b20 100644 --- a/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj +++ b/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/test/Microsoft.AspNetCore.SignalR.Tests/Microsoft.AspNetCore.SignalR.Tests.csproj b/test/Microsoft.AspNetCore.SignalR.Tests/Microsoft.AspNetCore.SignalR.Tests.csproj index 3f781d5455..02f1150b1d 100644 --- a/test/Microsoft.AspNetCore.SignalR.Tests/Microsoft.AspNetCore.SignalR.Tests.csproj +++ b/test/Microsoft.AspNetCore.SignalR.Tests/Microsoft.AspNetCore.SignalR.Tests.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/test/Microsoft.AspNetCore.Sockets.Tests/Microsoft.AspNetCore.Sockets.Tests.csproj b/test/Microsoft.AspNetCore.Sockets.Tests/Microsoft.AspNetCore.Sockets.Tests.csproj index 1942a84b66..2c48442819 100644 --- a/test/Microsoft.AspNetCore.Sockets.Tests/Microsoft.AspNetCore.Sockets.Tests.csproj +++ b/test/Microsoft.AspNetCore.Sockets.Tests/Microsoft.AspNetCore.Sockets.Tests.csproj @@ -12,7 +12,7 @@ - +