Change Group Add and Remove API (#522)
This commit is contained in:
parent
1ae4d3e042
commit
680c48d584
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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}");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue