Change Group Add and Remove API (#522)

This commit is contained in:
Mikael Mengistu 2017-06-06 21:50:34 -04:00 committed by GitHub
parent 1ae4d3e042
commit 680c48d584
8 changed files with 45 additions and 24 deletions

View File

@ -157,14 +157,14 @@ namespace ChatSample
return _wrappedHubLifetimeManager.InvokeUserAsync(userId, methodName, args);
}
public override Task AddGroupAsync(ConnectionContext connection, string groupName)
public override Task AddGroupAsync(string connectionId, string groupName)
{
return _wrappedHubLifetimeManager.AddGroupAsync(connection, groupName);
return _wrappedHubLifetimeManager.AddGroupAsync(connectionId, groupName);
}
public override Task RemoveGroupAsync(ConnectionContext connection, string groupName)
public override Task RemoveGroupAsync(string connectionId, string groupName)
{
return _wrappedHubLifetimeManager.RemoveGroupAsync(connection, groupName);
return _wrappedHubLifetimeManager.RemoveGroupAsync(connectionId, groupName);
}
}
}

View File

@ -31,14 +31,14 @@ namespace SocketsSample.Hubs
public async Task JoinGroup(string groupName)
{
await Clients.Group(groupName).InvokeAsync("Send", $"{Context.ConnectionId} joined {groupName}");
await Groups.AddAsync(Context.ConnectionId, groupName);
await Groups.AddAsync(groupName);
await Clients.Group(groupName).InvokeAsync("Send", $"{Context.ConnectionId} joined {groupName}");
}
public async Task LeaveGroup(string groupName)
{
await Groups.RemoveAsync(groupName);
await Groups.RemoveAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).InvokeAsync("Send", $"{Context.ConnectionId} left {groupName}");
}

View File

@ -200,17 +200,21 @@ namespace Microsoft.AspNetCore.SignalR.Redis
// in RemoveGroupAsync
foreach (var group in groupNames.ToArray())
{
tasks.Add(RemoveGroupAsync(connection, group));
tasks.Add(RemoveGroupAsync(connection.ConnectionId, group));
}
}
return Task.WhenAll(tasks);
}
public override async Task AddGroupAsync(ConnectionContext connection, string groupName)
public override async Task AddGroupAsync(string connectionId, string groupName)
{
var groupChannel = typeof(THub).FullName + ".group." + groupName;
var connection = _connections[connectionId];
if (connection == null)
{
return;
}
var groupNames = connection.Metadata.GetOrAdd(HubConnectionMetadataNames.Groups, _ => new HashSet<string>());
lock (groupNames)
@ -258,7 +262,7 @@ namespace Microsoft.AspNetCore.SignalR.Redis
}
}
public override async Task RemoveGroupAsync(ConnectionContext connection, string groupName)
public override async Task RemoveGroupAsync(string connectionId, string groupName)
{
var groupChannel = typeof(THub).FullName + ".group." + groupName;
@ -268,6 +272,12 @@ namespace Microsoft.AspNetCore.SignalR.Redis
return;
}
var connection = _connections[connectionId];
if (connection != null)
{
return;
}
var groupNames = connection.Metadata.Get<HashSet<string>>(HubConnectionMetadataNames.Groups);
if (groupNames != null)
{

View File

@ -20,10 +20,15 @@ namespace Microsoft.AspNetCore.SignalR
private long _nextInvocationId = 0;
private readonly ConnectionList _connections = new ConnectionList();
public override Task AddGroupAsync(ConnectionContext connection, string groupName)
public override Task AddGroupAsync(string connectionId, string groupName)
{
var groups = connection.Metadata.GetOrAdd(HubConnectionMetadataNames.Groups, _ => new HashSet<string>());
var connection = _connections[connectionId];
if (connection == null)
{
return Task.CompletedTask;
}
var groups = connection.Metadata.GetOrAdd(HubConnectionMetadataNames.Groups, _ => new HashSet<string>());
lock (groups)
{
groups.Add(groupName);
@ -32,8 +37,14 @@ namespace Microsoft.AspNetCore.SignalR
return Task.CompletedTask;
}
public override Task RemoveGroupAsync(ConnectionContext connection, string groupName)
public override Task RemoveGroupAsync(string connectionId, string groupName)
{
var connection = _connections[connectionId];
if (connection == null)
{
return Task.CompletedTask;
}
var groups = connection.Metadata.Get<HashSet<string>>(HubConnectionMetadataNames.Groups);
if (groups == null)

View File

@ -20,9 +20,9 @@ namespace Microsoft.AspNetCore.SignalR
public abstract Task InvokeUserAsync(string userId, string methodName, object[] args);
public abstract Task AddGroupAsync(ConnectionContext connection, string groupName);
public abstract Task AddGroupAsync(string connectionId, string groupName);
public abstract Task RemoveGroupAsync(ConnectionContext connection, string groupName);
public abstract Task RemoveGroupAsync(string connnectionId, string groupName);
}
}

View File

@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.SignalR
{
public interface IGroupManager
{
Task AddAsync(string groupName);
Task RemoveAsync(string groupName);
Task AddAsync(string connectionId, string groupName);
Task RemoveAsync(string connectionId, string groupName);
}
}

View File

@ -84,14 +84,14 @@ namespace Microsoft.AspNetCore.SignalR
_lifetimeManager = lifetimeManager;
}
public Task AddAsync(string groupName)
public Task AddAsync(string connectionId, string groupName)
{
return _lifetimeManager.AddGroupAsync(_connection, groupName);
return _lifetimeManager.AddGroupAsync(connectionId, groupName);
}
public Task RemoveAsync(string groupName)
public Task RemoveAsync(string connectionId, string groupName)
{
return _lifetimeManager.RemoveGroupAsync(_connection, groupName);
return _lifetimeManager.RemoveGroupAsync(connectionId, groupName);
}
}
}

View File

@ -649,7 +649,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{
public Task GroupRemoveMethod(string groupName)
{
return Groups.RemoveAsync(groupName);
return Groups.RemoveAsync(Context.ConnectionId, groupName);
}
public Task ClientSendMethod(string userId, string message)
@ -664,7 +664,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
public Task GroupAddMethod(string groupName)
{
return Groups.AddAsync(groupName);
return Groups.AddAsync(Context.ConnectionId, groupName);
}
public Task GroupSendMethod(string groupName, string message)