ConnectionMetadata is now ConnectionItems (#1604)

* ConnectionMetadata is now ConnectionItems
This commit is contained in:
David Fowler 2018-03-14 20:57:40 -07:00 committed by GitHub
parent 2b68db873a
commit d27844dfef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 33 additions and 31 deletions

View File

@ -22,11 +22,11 @@
<MicrosoftAspNetCoreHttpPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreHttpPackageVersion> <MicrosoftAspNetCoreHttpPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreHttpPackageVersion>
<MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion> <MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>
<MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreMvcPackageVersion> <MicrosoftAspNetCoreMvcPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreMvcPackageVersion>
<MicrosoftAspNetCoreProtocolsAbstractionsPackageVersion>2.1.0-a-preview2-move-transfer-format-17581</MicrosoftAspNetCoreProtocolsAbstractionsPackageVersion> <MicrosoftAspNetCoreProtocolsAbstractionsPackageVersion>2.1.0-a-preview2-connection-items-17583</MicrosoftAspNetCoreProtocolsAbstractionsPackageVersion>
<MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreRoutingPackageVersion> <MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreRoutingPackageVersion>
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreServerIISIntegrationPackageVersion> <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30319</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion> <MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30319</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-a-preview2-move-transfer-format-17581</MicrosoftAspNetCoreServerKestrelPackageVersion> <MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-a-preview2-connection-items-17583</MicrosoftAspNetCoreServerKestrelPackageVersion>
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreStaticFilesPackageVersion> <MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreStaticFilesPackageVersion>
<MicrosoftAspNetCoreTestHostPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreTestHostPackageVersion> <MicrosoftAspNetCoreTestHostPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreTestHostPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreTestingPackageVersion> <MicrosoftAspNetCoreTestingPackageVersion>2.1.0-preview2-30319</MicrosoftAspNetCoreTestingPackageVersion>

View File

@ -55,7 +55,7 @@ namespace FunctionalTests
public string GetActiveTransportName() public string GetActiveTransportName()
{ {
return Context.Connection.Metadata[ConnectionMetadataNames.Transport].ToString(); return Context.Connection.Items[ConnectionMetadataNames.Transport].ToString();
} }
public ComplexObject EchoComplexObject(ComplexObject complexObject) public ComplexObject EchoComplexObject(ComplexObject complexObject)

View File

@ -23,9 +23,9 @@ namespace SocialWeather
public void OnConnectedAsync(ConnectionContext connection) public void OnConnectedAsync(ConnectionContext connection)
{ {
connection.Features.Get<IConnectionMetadataFeature>().Metadata["groups"] = new HashSet<string>(); connection.Items["groups"] = new HashSet<string>();
var format = connection.GetHttpContext().Request.Query["formatType"].ToString(); var format = connection.GetHttpContext().Request.Query["formatType"].ToString();
connection.Features.Get<IConnectionMetadataFeature>().Metadata["format"] = format; connection.Items["format"] = format;
if (string.Equals(format, "protobuf", StringComparison.OrdinalIgnoreCase)) if (string.Equals(format, "protobuf", StringComparison.OrdinalIgnoreCase))
{ {
var transferFormatFeature = connection.Features.Get<ITransferFormatFeature>(); var transferFormatFeature = connection.Features.Get<ITransferFormatFeature>();
@ -47,7 +47,7 @@ namespace SocialWeather
foreach (var connection in _connectionList) foreach (var connection in _connectionList)
{ {
var context = connection.GetHttpContext(); var context = connection.GetHttpContext();
var formatter = _formatterResolver.GetFormatter<T>((string)connection.Features.Get<IConnectionMetadataFeature>().Metadata["format"]); var formatter = _formatterResolver.GetFormatter<T>((string)connection.Items["format"]);
var ms = new MemoryStream(); var ms = new MemoryStream();
await formatter.WriteAsync(data, ms); await formatter.WriteAsync(data, ms);
@ -72,7 +72,7 @@ namespace SocialWeather
public void AddGroupAsync(ConnectionContext connection, string groupName) public void AddGroupAsync(ConnectionContext connection, string groupName)
{ {
var groups = (HashSet<string>)connection.Features.Get<IConnectionMetadataFeature>().Metadata["groups"]; var groups = (HashSet<string>)connection.Items["groups"];
lock (groups) lock (groups)
{ {
groups.Add(groupName); groups.Add(groupName);
@ -81,7 +81,7 @@ namespace SocialWeather
public void RemoveGroupAsync(ConnectionContext connection, string groupName) public void RemoveGroupAsync(ConnectionContext connection, string groupName)
{ {
var groups = (HashSet<string>)connection.Features.Get<IConnectionMetadataFeature>().Metadata["groups"]; var groups = (HashSet<string>)connection.Items["groups"];
if (groups != null) if (groups != null)
{ {
lock (groups) lock (groups)

View File

@ -35,7 +35,7 @@ namespace SocialWeather
public async Task ProcessRequests(ConnectionContext connection) public async Task ProcessRequests(ConnectionContext connection)
{ {
var formatter = _formatterResolver.GetFormatter<WeatherReport>( var formatter = _formatterResolver.GetFormatter<WeatherReport>(
(string)connection.Features.Get<IConnectionMetadataFeature>().Metadata["format"]); (string)connection.Items["format"]);
while (true) while (true)
{ {

View File

@ -19,7 +19,7 @@ namespace SocketsSample.EndPoints
{ {
Connections.Add(connection); Connections.Add(connection);
await Broadcast($"{connection.ConnectionId} connected ({connection.Features.Get<IConnectionMetadataFeature>().Metadata[ConnectionMetadataNames.Transport]})"); await Broadcast($"{connection.ConnectionId} connected ({connection.Items[ConnectionMetadataNames.Transport]})");
try try
{ {
@ -52,7 +52,7 @@ namespace SocketsSample.EndPoints
{ {
Connections.Remove(connection); Connections.Remove(connection);
await Broadcast($"{connection.ConnectionId} disconnected ({connection.Features.Get<IConnectionMetadataFeature>().Metadata[ConnectionMetadataNames.Transport]})"); await Broadcast($"{connection.ConnectionId} disconnected ({connection.Items[ConnectionMetadataNames.Transport]})");
} }
} }

View File

@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.SignalR
public virtual IFeatureCollection Features => _connectionContext.Features; public virtual IFeatureCollection Features => _connectionContext.Features;
public virtual IDictionary<object, object> Metadata => Features.Get<IConnectionMetadataFeature>().Metadata; public virtual IDictionary<object, object> Items => _connectionContext.Items;
public virtual PipeReader Input => _connectionContext.Transport.Input; public virtual PipeReader Input => _connectionContext.Transport.Input;

View File

@ -15,8 +15,9 @@ namespace Microsoft.AspNetCore.Sockets
{ {
public class DefaultConnectionContext : ConnectionContext, public class DefaultConnectionContext : ConnectionContext,
IConnectionIdFeature, IConnectionIdFeature,
IConnectionMetadataFeature, IConnectionItemsFeature,
IConnectionTransportFeature, IConnectionTransportFeature,
IApplicationTransportFeature,
IConnectionUserFeature, IConnectionUserFeature,
IConnectionHeartbeatFeature, IConnectionHeartbeatFeature,
ITransferFormatFeature ITransferFormatFeature
@ -41,9 +42,10 @@ namespace Microsoft.AspNetCore.Sockets
// PERF: This type could just implement IFeatureCollection // PERF: This type could just implement IFeatureCollection
Features = new FeatureCollection(); Features = new FeatureCollection();
Features.Set<IConnectionUserFeature>(this); Features.Set<IConnectionUserFeature>(this);
Features.Set<IConnectionMetadataFeature>(this); Features.Set<IConnectionItemsFeature>(this);
Features.Set<IConnectionIdFeature>(this); Features.Set<IConnectionIdFeature>(this);
Features.Set<IConnectionTransportFeature>(this); Features.Set<IConnectionTransportFeature>(this);
Features.Set<IApplicationTransportFeature>(this);
Features.Set<IConnectionHeartbeatFeature>(this); Features.Set<IConnectionHeartbeatFeature>(this);
Features.Set<ITransferFormatFeature>(this); Features.Set<ITransferFormatFeature>(this);
} }
@ -66,9 +68,9 @@ namespace Microsoft.AspNetCore.Sockets
public ClaimsPrincipal User { get; set; } public ClaimsPrincipal User { get; set; }
public IDictionary<object, object> Metadata { get; set; } = new ConnectionMetadata(); public override IDictionary<object, object> Items { get; set; } = new ConnectionMetadata();
public IDuplexPipe Application { get; } public IDuplexPipe Application { get; set; }
public override IDuplexPipe Transport { get; set; } public override IDuplexPipe Transport { get; set; }

View File

@ -201,7 +201,7 @@ namespace Microsoft.AspNetCore.Sockets
{ {
Log.EstablishedConnection(_logger); Log.EstablishedConnection(_logger);
connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.LongPolling; connection.Items[ConnectionMetadataNames.Transport] = TransportType.LongPolling;
connection.ApplicationTask = ExecuteApplication(ConnectionDelegate, connection); connection.ApplicationTask = ExecuteApplication(ConnectionDelegate, connection);
} }
@ -344,8 +344,8 @@ namespace Microsoft.AspNetCore.Sockets
{ {
// Verify some initialization invariants // 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. // 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<IConnectionMetadataFeature>().Metadata[ConnectionMetadataNames.Transport] != null, "Transport has not been initialized yet"); Debug.Assert(connection.Items[ConnectionMetadataNames.Transport] != null, "Transport has not been initialized yet");
Debug.Assert((TransportType?)connection.Features.Get<IConnectionMetadataFeature>().Metadata[ConnectionMetadataNames.Transport] != TransportType.LongPolling || Debug.Assert((TransportType?)connection.Items[ConnectionMetadataNames.Transport] != TransportType.LongPolling ||
connection.Features.Get<IConnectionInherentKeepAliveFeature>() != null, "Long-polling transport is in use but IConnectionInherentKeepAliveFeature as not configured"); connection.Features.Get<IConnectionInherentKeepAliveFeature>() != 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 // 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"; context.Response.ContentType = "text/plain";
var transport = (TransportType?)connection.Metadata[ConnectionMetadataNames.Transport]; var transport = (TransportType?)connection.Items[ConnectionMetadataNames.Transport];
if (transport == TransportType.WebSockets) if (transport == TransportType.WebSockets)
{ {
Log.PostNotAllowedForWebSockets(_logger); Log.PostNotAllowedForWebSockets(_logger);
@ -473,11 +473,11 @@ namespace Microsoft.AspNetCore.Sockets
// Set the IHttpConnectionFeature now that we can access it. // Set the IHttpConnectionFeature now that we can access it.
connection.Features.Set(context.Features.Get<IHttpConnectionFeature>()); connection.Features.Set(context.Features.Get<IHttpConnectionFeature>());
var transport = (TransportType?)connection.Metadata[ConnectionMetadataNames.Transport]; var transport = (TransportType?)connection.Items[ConnectionMetadataNames.Transport];
if (transport == null) if (transport == null)
{ {
connection.Metadata[ConnectionMetadataNames.Transport] = transportType; connection.Items[ConnectionMetadataNames.Transport] = transportType;
} }
else if (transport != transportType) else if (transport != transportType)
{ {

View File

@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
public string GetActiveTransportName() public string GetActiveTransportName()
{ {
return Context.Connection.Metadata[ConnectionMetadataNames.Transport].ToString(); return Context.Connection.Items[ConnectionMetadataNames.Transport].ToString();
} }
} }

View File

@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
private Queue<HubMessage> _messages = new Queue<HubMessage>(); private Queue<HubMessage> _messages = new Queue<HubMessage>();
public DefaultConnectionContext Connection { get; } public DefaultConnectionContext Connection { get; }
public Task Connected => ((TaskCompletionSource<bool>)Connection.Metadata["ConnectedTask"]).Task; public Task Connected => ((TaskCompletionSource<bool>)Connection.Items["ConnectedTask"]).Task;
public TestClient(bool synchronousCallbacks = false, IHubProtocol protocol = null, IInvocationBinder invocationBinder = null, bool addClaimId = false) 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.User = new ClaimsPrincipal(new ClaimsIdentity(claims));
Connection.Metadata["ConnectedTask"] = new TaskCompletionSource<bool>(); Connection.Items["ConnectedTask"] = new TaskCompletionSource<bool>();
_protocol = protocol ?? new JsonHubProtocol(); _protocol = protocol ?? new JsonHubProtocol();
_invocationBinder = invocationBinder ?? new DefaultInvocationBinder(); _invocationBinder = invocationBinder ?? new DefaultInvocationBinder();

View File

@ -162,7 +162,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils
{ {
public override Task OnConnectedAsync() public override Task OnConnectedAsync()
{ {
var tcs = (TaskCompletionSource<bool>)Context.Connection.Metadata["ConnectedTask"]; var tcs = (TaskCompletionSource<bool>)Context.Connection.Items["ConnectedTask"];
tcs?.TrySetResult(true); tcs?.TrySetResult(true);
return base.OnConnectedAsync(); return base.OnConnectedAsync();
} }
@ -172,7 +172,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils
{ {
public override Task OnConnectedAsync() public override Task OnConnectedAsync()
{ {
var tcs = (TaskCompletionSource<bool>)Context.Connection.Metadata["ConnectedTask"]; var tcs = (TaskCompletionSource<bool>)Context.Connection.Items["ConnectedTask"];
tcs?.TrySetResult(true); tcs?.TrySetResult(true);
return base.OnConnectedAsync(); return base.OnConnectedAsync();
} }
@ -252,7 +252,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests.HubEndpointTestUtils
{ {
public override Task OnConnectedAsync() public override Task OnConnectedAsync()
{ {
var tcs = (TaskCompletionSource<bool>)Context.Connection.Metadata["ConnectedTask"]; var tcs = (TaskCompletionSource<bool>)Context.Connection.Items["ConnectedTask"];
tcs?.TrySetResult(true); tcs?.TrySetResult(true);
return base.OnConnectedAsync(); return base.OnConnectedAsync();
} }

View File

@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var pipeOptions = new PipeOptions(pauseWriterThreshold: 8, resumeWriterThreshold: 4); var pipeOptions = new PipeOptions(pauseWriterThreshold: 8, resumeWriterThreshold: 4);
var connection = manager.CreateConnection(pipeOptions, pipeOptions); var connection = manager.CreateConnection(pipeOptions, pipeOptions);
connection.Metadata[ConnectionMetadataNames.Transport] = transportType; connection.Items[ConnectionMetadataNames.Transport] = transportType;
using (var requestBody = new MemoryStream()) using (var requestBody = new MemoryStream())
using (var responseBody = new MemoryStream()) using (var responseBody = new MemoryStream())
@ -258,7 +258,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.Metadata[ConnectionMetadataNames.Transport] = TransportType.WebSockets; connection.Items[ConnectionMetadataNames.Transport] = TransportType.WebSockets;
using (var strm = new MemoryStream()) using (var strm = new MemoryStream())
{ {
@ -297,7 +297,7 @@ namespace Microsoft.AspNetCore.Sockets.Tests
var manager = CreateConnectionManager(loggerFactory); var manager = CreateConnectionManager(loggerFactory);
var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory); var dispatcher = new HttpConnectionDispatcher(manager, loggerFactory);
var connection = manager.CreateConnection(); var connection = manager.CreateConnection();
connection.Metadata[ConnectionMetadataNames.Transport] = transportType; connection.Items[ConnectionMetadataNames.Transport] = transportType;
using (var requestBody = new MemoryStream()) using (var requestBody = new MemoryStream())
using (var responseBody = new MemoryStream()) using (var responseBody = new MemoryStream())