From d27844dfef346665ae04c7e51085ad4325b5226c Mon Sep 17 00:00:00 2001 From: David Fowler Date: Wed, 14 Mar 2018 20:57:40 -0700 Subject: [PATCH] ConnectionMetadata is now ConnectionItems (#1604) * ConnectionMetadata is now ConnectionItems --- build/dependencies.props | 4 ++-- client-ts/FunctionalTests/TestHub.cs | 2 +- .../PersistentConnectionLifeTimeManager.cs | 10 +++++----- samples/SocialWeather/SocialWeatherEndPoint.cs | 2 +- samples/SocketsSample/EndPoints/MessagesEndPoint.cs | 4 ++-- .../HubConnectionContext.cs | 2 +- .../DefaultConnectionContext.cs | 10 ++++++---- .../HttpConnectionDispatcher.cs | 12 ++++++------ .../Hubs.cs | 2 +- .../TestClient.cs | 4 ++-- .../HubEndpointTestUtils/Hubs.cs | 6 +++--- .../HttpConnectionDispatcherTests.cs | 6 +++--- 12 files changed, 33 insertions(+), 31 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index 87455c487f..cc21468618 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -22,11 +22,11 @@ 2.1.0-preview2-30319 2.1.0-preview2-30319 2.1.0-preview2-30319 - 2.1.0-a-preview2-move-transfer-format-17581 + 2.1.0-a-preview2-connection-items-17583 2.1.0-preview2-30319 2.1.0-preview2-30319 0.5.0-preview2-30319 - 2.1.0-a-preview2-move-transfer-format-17581 + 2.1.0-a-preview2-connection-items-17583 2.1.0-preview2-30319 2.1.0-preview2-30319 2.1.0-preview2-30319 diff --git a/client-ts/FunctionalTests/TestHub.cs b/client-ts/FunctionalTests/TestHub.cs index 6867cb6604..e8a9d12b0c 100644 --- a/client-ts/FunctionalTests/TestHub.cs +++ b/client-ts/FunctionalTests/TestHub.cs @@ -55,7 +55,7 @@ namespace FunctionalTests public string GetActiveTransportName() { - return Context.Connection.Metadata[ConnectionMetadataNames.Transport].ToString(); + return Context.Connection.Items[ConnectionMetadataNames.Transport].ToString(); } public ComplexObject EchoComplexObject(ComplexObject complexObject) diff --git a/samples/SocialWeather/PersistentConnectionLifeTimeManager.cs b/samples/SocialWeather/PersistentConnectionLifeTimeManager.cs index 7924a6e61b..00d625ff5c 100644 --- a/samples/SocialWeather/PersistentConnectionLifeTimeManager.cs +++ b/samples/SocialWeather/PersistentConnectionLifeTimeManager.cs @@ -23,9 +23,9 @@ namespace SocialWeather public void OnConnectedAsync(ConnectionContext connection) { - connection.Features.Get().Metadata["groups"] = new HashSet(); + connection.Items["groups"] = new HashSet(); var format = connection.GetHttpContext().Request.Query["formatType"].ToString(); - connection.Features.Get().Metadata["format"] = format; + connection.Items["format"] = format; if (string.Equals(format, "protobuf", StringComparison.OrdinalIgnoreCase)) { var transferFormatFeature = connection.Features.Get(); @@ -47,7 +47,7 @@ namespace SocialWeather foreach (var connection in _connectionList) { var context = connection.GetHttpContext(); - var formatter = _formatterResolver.GetFormatter((string)connection.Features.Get().Metadata["format"]); + var formatter = _formatterResolver.GetFormatter((string)connection.Items["format"]); var ms = new MemoryStream(); await formatter.WriteAsync(data, ms); @@ -72,7 +72,7 @@ namespace SocialWeather public void AddGroupAsync(ConnectionContext connection, string groupName) { - var groups = (HashSet)connection.Features.Get().Metadata["groups"]; + var groups = (HashSet)connection.Items["groups"]; lock (groups) { groups.Add(groupName); @@ -81,7 +81,7 @@ namespace SocialWeather public void RemoveGroupAsync(ConnectionContext connection, string groupName) { - var groups = (HashSet)connection.Features.Get().Metadata["groups"]; + var groups = (HashSet)connection.Items["groups"]; if (groups != null) { lock (groups) diff --git a/samples/SocialWeather/SocialWeatherEndPoint.cs b/samples/SocialWeather/SocialWeatherEndPoint.cs index d8a4e1b80a..f6f5c58b6c 100644 --- a/samples/SocialWeather/SocialWeatherEndPoint.cs +++ b/samples/SocialWeather/SocialWeatherEndPoint.cs @@ -35,7 +35,7 @@ namespace SocialWeather public async Task ProcessRequests(ConnectionContext connection) { var formatter = _formatterResolver.GetFormatter( - (string)connection.Features.Get().Metadata["format"]); + (string)connection.Items["format"]); while (true) { diff --git a/samples/SocketsSample/EndPoints/MessagesEndPoint.cs b/samples/SocketsSample/EndPoints/MessagesEndPoint.cs index 7b2c9a7c79..038e8873fa 100644 --- a/samples/SocketsSample/EndPoints/MessagesEndPoint.cs +++ b/samples/SocketsSample/EndPoints/MessagesEndPoint.cs @@ -19,7 +19,7 @@ namespace SocketsSample.EndPoints { Connections.Add(connection); - await Broadcast($"{connection.ConnectionId} connected ({connection.Features.Get().Metadata[ConnectionMetadataNames.Transport]})"); + await Broadcast($"{connection.ConnectionId} connected ({connection.Items[ConnectionMetadataNames.Transport]})"); try { @@ -52,7 +52,7 @@ namespace SocketsSample.EndPoints { Connections.Remove(connection); - await Broadcast($"{connection.ConnectionId} disconnected ({connection.Features.Get().Metadata[ConnectionMetadataNames.Transport]})"); + await Broadcast($"{connection.ConnectionId} disconnected ({connection.Items[ConnectionMetadataNames.Transport]})"); } } diff --git a/src/Microsoft.AspNetCore.SignalR.Core/HubConnectionContext.cs b/src/Microsoft.AspNetCore.SignalR.Core/HubConnectionContext.cs index 8ac0995832..c07d8b4280 100644 --- a/src/Microsoft.AspNetCore.SignalR.Core/HubConnectionContext.cs +++ b/src/Microsoft.AspNetCore.SignalR.Core/HubConnectionContext.cs @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.SignalR public virtual IFeatureCollection Features => _connectionContext.Features; - public virtual IDictionary Metadata => Features.Get().Metadata; + public virtual IDictionary Items => _connectionContext.Items; public virtual PipeReader Input => _connectionContext.Transport.Input; diff --git a/src/Microsoft.AspNetCore.Sockets.Abstractions/DefaultConnectionContext.cs b/src/Microsoft.AspNetCore.Sockets.Abstractions/DefaultConnectionContext.cs index a90c35bf1d..f208da2eae 100644 --- a/src/Microsoft.AspNetCore.Sockets.Abstractions/DefaultConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Sockets.Abstractions/DefaultConnectionContext.cs @@ -15,8 +15,9 @@ namespace Microsoft.AspNetCore.Sockets { public class DefaultConnectionContext : ConnectionContext, IConnectionIdFeature, - IConnectionMetadataFeature, + IConnectionItemsFeature, IConnectionTransportFeature, + IApplicationTransportFeature, IConnectionUserFeature, IConnectionHeartbeatFeature, ITransferFormatFeature @@ -41,9 +42,10 @@ namespace Microsoft.AspNetCore.Sockets // PERF: This type could just implement IFeatureCollection Features = new FeatureCollection(); Features.Set(this); - Features.Set(this); + Features.Set(this); Features.Set(this); Features.Set(this); + Features.Set(this); Features.Set(this); Features.Set(this); } @@ -66,9 +68,9 @@ namespace Microsoft.AspNetCore.Sockets public ClaimsPrincipal User { get; set; } - public IDictionary Metadata { get; set; } = new ConnectionMetadata(); + public override IDictionary Items { get; set; } = new ConnectionMetadata(); - public IDuplexPipe Application { get; } + public IDuplexPipe Application { get; set; } public override IDuplexPipe Transport { get; set; } diff --git a/src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs b/src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs index a3c3396520..fe621b639f 100644 --- a/src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs +++ b/src/Microsoft.AspNetCore.Sockets.Http/HttpConnectionDispatcher.cs @@ -201,7 +201,7 @@ namespace Microsoft.AspNetCore.Sockets { Log.EstablishedConnection(_logger); - connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.LongPolling; + connection.Items[ConnectionMetadataNames.Transport] = TransportType.LongPolling; connection.ApplicationTask = ExecuteApplication(ConnectionDelegate, connection); } @@ -344,8 +344,8 @@ namespace Microsoft.AspNetCore.Sockets { // Verify some initialization invariants // We want to be positive that the IConnectionInherentKeepAliveFeature is initialized before invoking the application, if the long polling transport is in use. - Debug.Assert(connection.Features.Get().Metadata[ConnectionMetadataNames.Transport] != null, "Transport has not been initialized yet"); - Debug.Assert((TransportType?)connection.Features.Get().Metadata[ConnectionMetadataNames.Transport] != TransportType.LongPolling || + Debug.Assert(connection.Items[ConnectionMetadataNames.Transport] != null, "Transport has not been initialized yet"); + Debug.Assert((TransportType?)connection.Items[ConnectionMetadataNames.Transport] != TransportType.LongPolling || connection.Features.Get() != null, "Long-polling transport is in use but IConnectionInherentKeepAliveFeature as not configured"); // Jump onto the thread pool thread so blocking user code doesn't block the setup of the @@ -440,7 +440,7 @@ namespace Microsoft.AspNetCore.Sockets context.Response.ContentType = "text/plain"; - var transport = (TransportType?)connection.Metadata[ConnectionMetadataNames.Transport]; + var transport = (TransportType?)connection.Items[ConnectionMetadataNames.Transport]; if (transport == TransportType.WebSockets) { Log.PostNotAllowedForWebSockets(_logger); @@ -473,11 +473,11 @@ namespace Microsoft.AspNetCore.Sockets // Set the IHttpConnectionFeature now that we can access it. connection.Features.Set(context.Features.Get()); - var transport = (TransportType?)connection.Metadata[ConnectionMetadataNames.Transport]; + var transport = (TransportType?)connection.Items[ConnectionMetadataNames.Transport]; if (transport == null) { - connection.Metadata[ConnectionMetadataNames.Transport] = transportType; + connection.Items[ConnectionMetadataNames.Transport] = transportType; } else if (transport != transportType) { diff --git a/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Hubs.cs b/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Hubs.cs index 6928a52fff..fef6ae52ce 100644 --- a/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Hubs.cs +++ b/test/Microsoft.AspNetCore.SignalR.Client.FunctionalTests/Hubs.cs @@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests public string GetActiveTransportName() { - return Context.Connection.Metadata[ConnectionMetadataNames.Transport].ToString(); + return Context.Connection.Items[ConnectionMetadataNames.Transport].ToString(); } } diff --git a/test/Microsoft.AspNetCore.SignalR.Tests.Utils/TestClient.cs b/test/Microsoft.AspNetCore.SignalR.Tests.Utils/TestClient.cs index d0784a39c0..bdff90fdc6 100644 --- a/test/Microsoft.AspNetCore.SignalR.Tests.Utils/TestClient.cs +++ b/test/Microsoft.AspNetCore.SignalR.Tests.Utils/TestClient.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests private Queue _messages = new Queue(); public DefaultConnectionContext Connection { get; } - public Task Connected => ((TaskCompletionSource)Connection.Metadata["ConnectedTask"]).Task; + public Task Connected => ((TaskCompletionSource)Connection.Items["ConnectedTask"]).Task; public TestClient(bool synchronousCallbacks = false, IHubProtocol protocol = null, IInvocationBinder invocationBinder = null, bool addClaimId = false) { @@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests } Connection.User = new ClaimsPrincipal(new ClaimsIdentity(claims)); - Connection.Metadata["ConnectedTask"] = new TaskCompletionSource(); + Connection.Items["ConnectedTask"] = new TaskCompletionSource(); _protocol = protocol ?? new JsonHubProtocol(); _invocationBinder = invocationBinder ?? new DefaultInvocationBinder(); diff --git a/test/Microsoft.AspNetCore.SignalR.Tests/HubEndpointTestUtils/Hubs.cs b/test/Microsoft.AspNetCore.SignalR.Tests/HubEndpointTestUtils/Hubs.cs index 981497ee29..193ff496cc 100644 --- a/test/Microsoft.AspNetCore.SignalR.Tests/HubEndpointTestUtils/Hubs.cs +++ b/test/Microsoft.AspNetCore.SignalR.Tests/HubEndpointTestUtils/Hubs.cs @@ -162,7 +162,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils { public override Task OnConnectedAsync() { - var tcs = (TaskCompletionSource)Context.Connection.Metadata["ConnectedTask"]; + var tcs = (TaskCompletionSource)Context.Connection.Items["ConnectedTask"]; tcs?.TrySetResult(true); return base.OnConnectedAsync(); } @@ -172,7 +172,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils { public override Task OnConnectedAsync() { - var tcs = (TaskCompletionSource)Context.Connection.Metadata["ConnectedTask"]; + var tcs = (TaskCompletionSource)Context.Connection.Items["ConnectedTask"]; tcs?.TrySetResult(true); return base.OnConnectedAsync(); } @@ -252,7 +252,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils { public override Task OnConnectedAsync() { - var tcs = (TaskCompletionSource)Context.Connection.Metadata["ConnectedTask"]; + var tcs = (TaskCompletionSource)Context.Connection.Items["ConnectedTask"]; tcs?.TrySetResult(true); return base.OnConnectedAsync(); } diff --git a/test/Microsoft.AspNetCore.Sockets.Tests/HttpConnectionDispatcherTests.cs b/test/Microsoft.AspNetCore.Sockets.Tests/HttpConnectionDispatcherTests.cs index d23058c11b..b0c6245375 100644 --- a/test/Microsoft.AspNetCore.Sockets.Tests/HttpConnectionDispatcherTests.cs +++ b/test/Microsoft.AspNetCore.Sockets.Tests/HttpConnectionDispatcherTests.cs @@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var pipeOptions = new PipeOptions(pauseWriterThreshold: 8, resumeWriterThreshold: 4); var connection = manager.CreateConnection(pipeOptions, pipeOptions); - connection.Metadata[ConnectionMetadataNames.Transport] = transportType; + connection.Items[ConnectionMetadataNames.Transport] = transportType; using (var requestBody = new MemoryStream()) using (var responseBody = new MemoryStream()) @@ -258,7 +258,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests var manager = CreateConnectionManager(loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var connection = manager.CreateConnection(); - connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.WebSockets; + connection.Items[ConnectionMetadataNames.Transport] = TransportType.WebSockets; using (var strm = new MemoryStream()) { @@ -297,7 +297,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests var manager = CreateConnectionManager(loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var connection = manager.CreateConnection(); - connection.Metadata[ConnectionMetadataNames.Transport] = transportType; + connection.Items[ConnectionMetadataNames.Transport] = transportType; using (var requestBody = new MemoryStream()) using (var responseBody = new MemoryStream())