Как я могу проверить, сколько соединений в группе в моей службе Azure SignalR? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь внедрить службу Azure SignalR, чтобы упростить обмен сообщениями между настольным компьютером, asp.net-core и приложениями xamarin.ios.

Я создал Hub согласно документации Microsoft здесь: https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-2.2

Концентратор:

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 (поправьте меня, если я 'm неправильно)

Я вижу, что группа возвращается как Microsoft.AspNetCore.SignalR.Internal.GroupProxy<ChatHub> во время выполнения без открытых методов.Внутренние закрытые переменные включают _groupName и _lifeTimeManager, и в менеджере времени жизни есть _clientConnectionManager, который, как я вижу, имеет клиентские подключения, когда они подключены, но у меня нет доступа к любому из них, я использую Microsoft.Azure.SignalR (1.0.4) Пакет Nuget.Кто-нибудь знает, возможно ли то, что я пытаюсь сделать с помощью этого SDK, и если да, то как я могу это сделать?

...