В клиенте OnConnected клиент добавляется в группу с его именем (группа содержит весь идентификатор клиента), тогда его имя добавляется в список, если оно не существует.Проверка наличия группы в группе SignalR?
static List<string> onlineClients = new List<string>(); // list of clients names
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, Context.User.Identity.Name);
if (!onlineClients.Exists(x => x == Context.User.Identity.Name))
{
onlineClients.Add(Context.User.Identity.Name);
}
return base.OnConnected();
}
В методе OnDisconnected я пытаюсь проверить, пуста ли группа, чтобы удалить элемент из списка. Но после удаления последнего соединения группа не равна нулю.
public override Task OnDisconnected(bool stopCalled)
{
if (stopCalled)
{
// We know that Stop() was called on the client,
// and the connection shut down gracefully.
Groups.Remove(Context.ConnectionId, Context.User.Identity.Name);
if (Clients.Group(Context.User.Identity.Name) == null)
{
onlineClients.Remove(Context.User.Identity.Name);
}
}
return base.OnDisconnected(stopCalled);
}
Могу ли я проверить пустую группу?
вопрос непонятен, что такое 'Группы' типа? –
SignalR не предоставляет никаких API-интерфейсов для запроса, имеет ли группа активных клиентов. Нет ничего, что мешает вам отслеживать это вручную в OnConencted и OnDisconnected. – halter73