Отправить сообщение только одному пользователю с помощью signalR - PullRequest
1 голос
/ 07 мая 2020

Я пишу приложение для чата. Я использую Angular 6 и .Net Core 3.1.

Я прочитал много документов, но все еще не понимаю, в чем ошибка.

My Hub Class

public class ChatHub : Hub
{ 
    private static List<ConnectedUser> _connectedUsers = new List<ConnectedUser>();

    public override Task OnConnectedAsync()
    {
        var username = Context.GetHttpContext().Request.Query["username"];

        var status = _connectedUsers.FirstOrDefault(x => x.Username == username);

        if (status == null)
        {
            _connectedUsers.Add(new ConnectedUser
            {
                ConnId = Context.ConnectionId,
                Username = username
            });

        }

        return base.OnConnectedAsync();
    } 
    ...

У меня есть список, в котором хранится информация connection id пользователей, подключенных к моему Hub Class. Когда пользователи подключаются, я добавляю их в этот список.

Я работаю в своем Private Chat Function ниже.

public void PrivateChat(string toUser,string fromUser,string message)
{
    _connectedUsers.ForEach(val =>
    {
        if(val.Username == toUser)
           Clients.User(val.ConnId).SendAsync("receiveMessage", message,fromUser);
    });
}

Однако я не могу вернуться к тому пользователю, которого хочу.

Вы используете его в Angular так

this._hubConnection.on('receiveMessage', (message,fromUser) => {
     console.log(message , "+" , fromUser);
  }
);

1 Ответ

1 голос
/ 07 мая 2020

Вы должны использовать

 Clients.Clients(val.ConnId).SendAsync("receiveMessage", message,fromUser);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...