В приложении SignalR на ядре .NET у меня есть рабочий фрагмент кода, подобный следующему:
public Task SendPrivateMessage(string user, string message)
{
var sender = Context.User.Claims.FirstOrDefault(cl => cl.Type == "username")?.Value;
return Clients.User(user)
.SendAsync("ReceiveMessage", $"Message from {sender}: {message}");
}
Это отправляет сообщение от текущего подключенного пользователя указанному пользователю.
Теперь я хотел бы отправить отдельное сообщение каждому подключенному пользователю; что-то вроде следующей концепции:
public Task UpdateMessageStatus()
{
foreach(client in Clients.Users)
{
var nrOfMessages = GetMessageCount();
client.SendAsync($"You have {nrOfMessages} messages.");
}
}
Как я могу этого добиться? т.е. как я могу перебирать подключенных пользователей и отправлять каждому из них индивидуальные сообщения?
Редактирование / уточнение
Как уже упоминалось, мне нужно было отправлять отдельные (то есть специализированные) сообщения каждому подключенному пользователю, поэтому использование Clients.All
не было вариантом, поскольку его можно использовать только для отправки одного и того же сообщения всем подключенным пользователям.
В итоге я сделал что-то похожее на то, что Марк С. написал в принятом ответе.
UpdateMessageStatus
? - person Spotted   schedule 17.07.2018