Ядро SignalR получает сообщения от конкретного пользователя - PullRequest
0 голосов
/ 08 февраля 2019

Ядро SignalR очень новое, поэтому подробное описание документации по нему очень редко.Я сделал учебник от Microsoft и успешно отправил сообщения всем клиентам.Теперь я хочу отправить для конкретного пользователя, с

public Task SendPrivateMessage(string user, string message, string to)
{
    return Clients.User(to).SendAsync("ReceiveMessage", user, message);
}

значение "to" - это ConnectionID, который я получил от

public override Task OnConnectedAsync()
{
    Console.WriteLine("New ID Connected: " + Context.ConnectionId);
    return base.OnConnectedAsync();
}

Вот мой клиент:

public async void InitSignalRAsync()
{
    ChatMessage mess = new ChatMessage();
    hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:5000/chatHub").Build();
    await hubConnection.StartAsync();
    hubConnection.On<string, string>("ReceiveMessage", async (user, message) =>
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            mess.user = user;
            mess.message = message;
            Messages.Add(mess);
        });
    });
}


private void Send_Click(object sender, RoutedEventArgs e)
{
    hubConnection.InvokeAsync("SendPrivateMessage", User.Text, Text.Text, To.Text);
}

Консоль ничего не регистрирует, поэтому я думаю, что отправка произошла, но почему я не могу ее получить?

1 Ответ

0 голосов
/ 08 февраля 2019

Для отправки клиенту по клиентскому соединению, вы должны использовать Clients.Client (coonectionId), Clients.User () для отправки уникальному пользователю по идентификатору пользователя. Для отправки сообщения по идентификатору пользователя вы можете попробовать сделать следующее: -создайте CustomUserIdProvider:

 public class CustomUserIdProvider: IUserIdProvider
{
    public virtual string GetUserId(HubConnectionContext connection)
    {
        //get current user id by httpcontext
    }
}

, а затем в файле startup.cs:

services.AddSignalR();
services.AddSignalRCore();

services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();

теперь в своем хабе вы можете отправить сообщение по идентификатору пользователя:

public void Send(string userId, string message)
{
    Clients.User(userId).send(message);
}

для получения дополнительной информации перейдите по этой ссылке

...