Перейти к содержанию

Делаем хаб типизированным

В прошлом разделе мы использовали обычную строку для указания на клиентское событие, которое нам нужно выполнить. Теперь, для того чтобы исключить появления разного рода трудноуловимых ошибок, связанных с опечатками и устареванием строковых констант, добавим формальное описание контракта клиента, другими словами — интерфейс.

public interface ILearningHubClient
{
    Task ReceiveMessage(string message);
}

Мы указали имя клиентского события в качестве имени метода. Теперь модифицируем сам хаб:
public class LearningHub : Hub<ILearningHubClient>
{
    public async Task BroadcastMessage(string message)
    {
        await Clients.All.ReceiveMessage(message);
    }

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

    public override async Task OnDisconnectedAsync(Exception? exception)
    {
        await base.OnDisconnectedAsync(exception);
    }
}

Здесь мы унаследовали наш хаб от дженерика Hub<>, и это позволило нам вызвать метод у клиента напрямую, без необходимости использовать SendAsync() и строки.


Последнее обновление : 8 июня 2023 г.
Дата создания : 11 декабря 2022 г.

Комментарии

Комментарии