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);
|
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)
|
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)
|
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}");
|
await Clients.Group(groupName).InvokeAsync("Send", $"{Context.ConnectionId} left {groupName}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,17 +200,21 @@ namespace Microsoft.AspNetCore.SignalR.Redis
|
||||||
// in RemoveGroupAsync
|
// in RemoveGroupAsync
|
||||||
foreach (var group in groupNames.ToArray())
|
foreach (var group in groupNames.ToArray())
|
||||||
{
|
{
|
||||||
tasks.Add(RemoveGroupAsync(connection, group));
|
tasks.Add(RemoveGroupAsync(connection.ConnectionId, group));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.WhenAll(tasks);
|
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 groupChannel = typeof(THub).FullName + ".group." + groupName;
|
||||||
|
var connection = _connections[connectionId];
|
||||||
|
if (connection == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
var groupNames = connection.Metadata.GetOrAdd(HubConnectionMetadataNames.Groups, _ => new HashSet<string>());
|
var groupNames = connection.Metadata.GetOrAdd(HubConnectionMetadataNames.Groups, _ => new HashSet<string>());
|
||||||
|
|
||||||
lock (groupNames)
|
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;
|
var groupChannel = typeof(THub).FullName + ".group." + groupName;
|
||||||
|
|
||||||
|
|
@ -268,6 +272,12 @@ namespace Microsoft.AspNetCore.SignalR.Redis
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var connection = _connections[connectionId];
|
||||||
|
if (connection != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var groupNames = connection.Metadata.Get<HashSet<string>>(HubConnectionMetadataNames.Groups);
|
var groupNames = connection.Metadata.Get<HashSet<string>>(HubConnectionMetadataNames.Groups);
|
||||||
if (groupNames != null)
|
if (groupNames != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,15 @@ namespace Microsoft.AspNetCore.SignalR
|
||||||
private long _nextInvocationId = 0;
|
private long _nextInvocationId = 0;
|
||||||
private readonly ConnectionList _connections = new ConnectionList();
|
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)
|
lock (groups)
|
||||||
{
|
{
|
||||||
groups.Add(groupName);
|
groups.Add(groupName);
|
||||||
|
|
@ -32,8 +37,14 @@ namespace Microsoft.AspNetCore.SignalR
|
||||||
return Task.CompletedTask;
|
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);
|
var groups = connection.Metadata.Get<HashSet<string>>(HubConnectionMetadataNames.Groups);
|
||||||
|
|
||||||
if (groups == null)
|
if (groups == null)
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,9 @@ namespace Microsoft.AspNetCore.SignalR
|
||||||
|
|
||||||
public abstract Task InvokeUserAsync(string userId, string methodName, object[] args);
|
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
|
public interface IGroupManager
|
||||||
{
|
{
|
||||||
Task AddAsync(string groupName);
|
Task AddAsync(string connectionId, string groupName);
|
||||||
Task RemoveAsync(string groupName);
|
Task RemoveAsync(string connectionId, string groupName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,14 +84,14 @@ namespace Microsoft.AspNetCore.SignalR
|
||||||
_lifetimeManager = lifetimeManager;
|
_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)
|
public Task GroupRemoveMethod(string groupName)
|
||||||
{
|
{
|
||||||
return Groups.RemoveAsync(groupName);
|
return Groups.RemoveAsync(Context.ConnectionId, groupName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task ClientSendMethod(string userId, string message)
|
public Task ClientSendMethod(string userId, string message)
|
||||||
|
|
@ -664,7 +664,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
|
||||||
|
|
||||||
public Task GroupAddMethod(string groupName)
|
public Task GroupAddMethod(string groupName)
|
||||||
{
|
{
|
||||||
return Groups.AddAsync(groupName);
|
return Groups.AddAsync(Context.ConnectionId, groupName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task GroupSendMethod(string groupName, string message)
|
public Task GroupSendMethod(string groupName, string message)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue