Попытка добавить клиентов в группу внутри SignalR, но не работает - PullRequest
5 голосов
/ 18 марта 2019

Когда я пытаюсь работать с группами в SignalR, у меня появляется что-то странное.Я сделал класс для своего хаба, где есть Task, который работает, когда я пингую всех клиентов.Я сделал два метода, один из которых - добавить, а второй - удалить клиентов из группы.Но когда я пытаюсь найти клиента в группе, ничего не получается.Вот код хаба:

public interface IActionClient
{
    // User is in front of the cameras
    Task HighlightUser(Guid userId);
    // When users added or deleted
    Task UpdateGame(int gameId);
    Task JoinGroupAsync(string groupName);
    Task LeaveGroupAsync(string groupName);
}

// possible clients
public enum ClientType
{
    Leaderboard,
    Dashboard,
    Register
}

public class OneHub : Hub<IActionClient>
{
    public OneHub()
    {
    }

    public override async Task OnConnectedAsync()
    {
        await base.OnConnectedAsync();
    }

    public async Task JoinGroupAsync(string groupName) => await Groups.AddToGroupAsync(Context.ConnectionId, groupName);

    public async Task LeaveGroupAsync(string groupName) => await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);

    // todo : groups 
}

И вот когда я пытаюсь добавить своих клиентов в группу:

        // add client to group hub
        await _hubClients.Clients.All.JoinGroupAsync(groupName);

1 Ответ

0 голосов
/ 14 апреля 2019

Я вижу, что это способ добавить пользователя в группу на основе идентификатора соединения, подобного этому

    public override Task AddGroupAsync(string connectionId, string groupName)
    {
        if (connectionId == null)
        {
            throw new ArgumentNullException(nameof(connectionId));
        }

        if (groupName == null)
        {
            throw new ArgumentNullException(nameof(groupName));
        }

        var connection = _connections[connectionId];
        if (connection == null)
        {
            return Task.CompletedTask;
        }

        _groups.Add(connection, groupName);

        return Task.CompletedTask;
    }

Ref код

Надеюсь, это поможет

...