Как я могу проверить, сколько соединений в группе в моей службе Azure SignalR?
Я пытаюсь внедрить службу Azure SignalR, чтобы упростить обмен сообщениями между настольным компьютером, asp.net-core и приложениями xamarin.ios.
Я создал Hub
в соответствии с документацией Microsoft здесь: https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-2.2
Hub:
public class ChatHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Я добавляю соединения пользователей в группу, когда они подключаются к концентратору, как показано здесь: https://docs.microsoft.com/en-us/aspnet/core/signalr/groups?view=aspnetcore-2.2
Добавить в группу:
public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has left the group {groupName}.");
}
Когда сообщение отправляется, оно имеет имя группы в качестве параметра, я хотел бы проверить, есть ли у предоставленной группы какие-либо соединения, прежде чем отправлять сообщение любым зарегистрированным клиентам, если нет соединений, я хотел бы отправить push-уведомление (уже есть рабочий код для push-уведомлений)
Отправить сообщение с уведомлением
public class ChatHub : Hub
{
public Task SendMessage(string groupName, string user, string message)
{
var group = Clients.Group(groupName);
// todo: how to check if we have any open connections in this group?
if(group.Conections.Count > 0)
{
return group.SendAsync("ReceiveMessage", user, message);
}
else
{
// todo: run code to send push notification or anything else you might want to do
}
}
}
Проблема: я не вижу способа проверить количество соединений в группе в данный момент через доступные API (поправьте меня, если я ошибаюсь)
Я вижу, что группа возвращается Microsoft.AspNetCore.SignalR.Internal.GroupProxy<ChatHub>
во время выполнения без открытых методов. Внутренние частные переменные включают _groupName
а также _lifeTimeManager
и в течение жизни менеджера есть _clientConnectionManager
который я вижу, имеет клиентские подключения, когда они подключены, но у меня нет доступа к любому из них, я использую Microsoft.Azure.SignalR
(1.0.4) Пакет Nuget. Кто-нибудь знает, возможно ли то, что я пытаюсь сделать с помощью этого SDK, и если да, то как я могу это сделать?