Вы можете использовать SignalR для этого случая, когда при входе пользователя в систему вы можете записать логику подключения пользователя к списку, а при выходе из системы вы можете удалить идентификатор из списка
Я будуопределить список подключений для хранения списка идентификаторов подключений
public static class ConnectionList
{
private static readonly HashSet<string> connectedIds = new HashSet<string>();
public static HashSet<string> ConnectedIds
{
get => connectedIds;
set => ConnectedIds = value;
}
}
, затем в своем классе концентратора я определю метод для обработки подключения и отключения клиента
public Task GetTotalAccountConnect()
{
return Clients.All.InvokeAsync("TotalClientConnect", ConnectionList.ConnectedIds.Count);
}
public override Task OnConnectedAsync()
{
ConnectionList.ConnectedIds.Add(Context.ConnectionId);
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(Exception exception)
{
ConnectionList.ConnectedIds.Remove(Context.ConnectionId);
return base.OnDisconnectedAsync(exception);
}
Затем в своем угловом коде Iподключится к хабу
connectOnlineHub(): HubConnection {
const connection = new signalR.HubConnection(`${this.onlineHubUrl}/onlinehub`);
connection.start().then(() => connection.invoke('GetTotalAccountConnect'));
connection.on('TotalClientConnect', data => {
this.totalOnline = data;
});
}
Так что в строке this.totalOnline у меня будет номер подключения пользователя