У меня есть клиентское приложение uwp, которое должно выполнить следующие 3 сценария для функции чата.
- общаться со всеми, кто подключен к сигнальному концентратору R (общедоступный)
- общаться с MyGroupтолько: каждый пользователь будет частью группы.
- приватный чат (чат 1 на 1 с другими пользователями)
У меня есть следующий код концентратора, где я каким-то образом могу сделать публичную и групповую функцию.
public class ChatHub : Hub
{
public Task SendPrivateTweet(string user, string message)
{
return Clients.User(user).SendAsync("ReceiveTweet", user, message);
}
public async Task SendTweet(string user, string message)
{
await Clients.All.SendAsync("ReceiveTweet", user, message);
}
public async Task SendTweetGroup(string groupName, string user, string message)
{
await Clients.Group(groupName).SendAsync("ReceiveTweet", user, message);
}
public async Task AddToGroup(string user, string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("EnteredOrLeft", $"{user} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string user, string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("EnteredOrLeft", $"{user} has left the group {groupName}.");
}
}
У меня есть база данных с информацией о пользователях, и у каждого пользователя есть имя группы, связанное с ним, на основании того, что я добавляю каждое соединение в соответствующую группу.
await hubConnection.InvokeAsync("AddToGroup", user.Name, user.GroupName);
Я должен сделать это, потому что у меня нет пользователей, вошедших в signalR, поэтому я не могу сопоставить их userIds с тем, что есть в моей базе данных, и именно поэтому я не могу отправить личное сообщение определенному пользователю, потому что для этого контекста должна быть информация о пользователечто в данный момент этого не происходит, в соответствии с документацией происходит сложная работа с носителями токенов, и я не знаю API для всплывающего входа Microsoft для пользователя (чтобыть идеальным).
Есть ли другой способ, как я могу сохранить идентификаторы пользователя в концентраторе, чтобы я мог легко отправить личное сообщение от клиента, отправив идентификатор пользователя получателя?
Iзначит, я могу назначить идентификатор пользователя для каждого соединения во время подключения к концентратору?который в дальнейшем можно будет использовать для запросов в хабе?
Я вижу, как сделать идентификацию в веб-приложении, но не могу найти учебник для того, чтобы сделать то же самое в нативном приложении, таком как uwp: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.2&tabs=visual-studio