У меня есть одна версия R 2.2.1. я реализую пользовательского идентификатор поставщикsignalr Clients.Users (userIds) .send (msg) не работает
public class ChatUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
if (request.User.Identity.IsAuthenticated)
{
Guid.Parse(request.User.Identity.GetUserId().ToString());
var userId = request.User.Identity.GetUserId().ToString();
return userId.ToString();
}
return "Un Known";
}
}
Я сделал простое приложение чата и каждый думает нормально, но когда я пытаюсь отправить сообщение для нескольких пользователей события клиента не стреляющих здесь функция ступицы
public void SendToMany(string msg, List<string> userIds)
{
try
{
//db things here
Clients.Users(userIds).sendMessage(msg);
}
catch (Exception ex)
{
Logs.Log(ex);
}
}
Startup
GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider),() => new ChatUserIdProvider());
app.MapSignalR();
Js
$(function() {
var chat = $.connection.chatHub;
chat.client.sendMessage= function (msg) {
$('.msgs').append('<div>'+ group.Name + '</div>');
$('#' + group.Id).click();
}
$.connection.hub.start();
})
function BrodCast() {
try {
var chatids = new Array();
$('.ckusergr').each(function() {
if ($(this).is(':checked')) {
chatids.push($(this).attr('iid'));
}
})
chat.server.sendToMany($('.txtmsg').val(), chatids);
} catch (e) {
console.log(e)
}
}
проблема с этой линией
public void SendToMany(string msg, List<string> userIds)
{
try
{
//db things here
Clients.Users(userIds).sendMessage(msg); // Her is the Problem
}
catch (Exception ex)
{
Logs.Log(ex);
}
}
если я изменить, чтобы стать, как этого каждая вещь работы большой.
public void SendToMany(string msg, List<string> userIds)
{
try
{
//db things here
foreach (string item in userIds)
{
Clients.User(item).sendMessage(msg);
}
}
catch (Exception ex)
{
Logs.Log(ex);
}
}
'Clients.User' работает с идентификатором пользователя, который является строкой. он не работает со списком строки. поэтому вам нужно использовать foreach для его работы. Я не уверен, как вы его проектируете, но вы можете рассмотреть возможность использования 'Clients.All'. он автоматически отправит сообщение всем онлайн-клиентам. – Mark
вы работаете 'Clients.User' со строкой' user Id', но я пытаюсь использовать 'Clients.Users', который принимает список идентификаторов пользователей. – Bakri