Вы можете использовать следующий подход для доступа к некоторым свойствам user, connection и т.д. c.
[HubName("demoHub")]
public class DemoHub : Hub
{
public readonly static ConnectionMapping<string> connections =
new ConnectionMapping<string>();
public override async Task OnConnected()
{
string name = Context.User.Identity.Name;
connections.Add(name, Context.ConnectionId);
//await Groups.Add(Context.ConnectionId, Context.QueryString["group"]);
await base.OnConnected();
}
public override async Task OnDisconnected(bool stopCalled)
{
string name = Context.User.Identity.Name;
connections.Remove(name, Context.ConnectionId);
//await Groups.Remove(Context.ConnectionId, Context.QueryString["group"]);
await base.OnDisconnected(stopCalled);
}
public override async Task OnReconnected()
{
string name = Context.User.Identity.Name;
if (!connections.GetConnections(name).Contains(Context.ConnectionId))
{
connections.Add(name, Context.ConnectionId);
//await Groups.Add(Context.ConnectionId, Context.QueryString["group"]);
}
await base.OnReconnected();
}
}
Обновление: При необходимости вы можете использовать следующие методы или создавать похожие, используя тот же лог c:
public Task JoinToGroup(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
public Task LeaveFromGroup(string groupName)
{
return Groups.Remove(Context.ConnectionId, groupName);
}
public async Task AddToGroup(string connectionId, string groupName)
{
await Groups.Add(connectionId, groupName);
//await Clients.Group(groupName).ReceiveMessage("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string connectionId, string groupName)
{
await Groups.Remove(connectionId, groupName);
//await Clients.Group(groupName).ReceiveMessage("Send", $"{Context.ConnectionId} has left the group {groupName}.");
}