Как клиент разрешает отправить сообщение пользователю?
Отправка с контроллера
hubContext.Clients.User(User.Identity.Name).SendAsync();
На данный момент сообщение не отправлено.Нужно ли что-то добавить в OnConnection ()?Или у SignalR есть готовый механизм сопоставления для ConnectionId и User.Identity.Name?
Вот как я это реализовал в данный момент, но мне кажется, это не совсем правильно.Вопрос в том, как сделать такие же стандартные инструменты?
public static class HubConnections
{
public static Dictionary<string, List<string>> Users = new Dictionary<string, List<string>>();
public static List<string> GetUserId(string name)
{
return Users[name];
}
}
public class GameHub : Hub
{
public override Task OnConnectedAsync()
{
if (Context.User.Identity.IsAuthenticated
&& HubConnections.Users.ContainsKey(Context.User.Identity.Name)
&& !HubConnections.Users[Context.User.Identity.Name].Contains(Context.ConnectionId))
HubConnections.Users[Context.User.Identity.Name].Add(Context.ConnectionId);
else
HubConnections.Users.Add(Context.User.Identity.Name, new List<string> { Context.ConnectionId });
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(Exception exception)
{
if (Context.User.Identity.IsAuthenticated) HubConnections.Users.Remove(Context.User.Identity.Name);
return base.OnDisconnectedAsync(exception);
}
}
Как я уже говорил выше, я попробовал так же, и это не работает
hubContext.Clients.User(User.Identity.Name).SendAsync();