Ich habe einzelne R-Version 2.2.1. ich implementieren individuellen ID-Providersignaler Clients.Users (userIds) .send (msg) nicht feuern
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";
}
}
ich einen einfachen Chat-App gemacht und jeder denken, in Ordnung, aber wenn ich versuche, das Client-Ereignis nicht ausgelöst hier ist
Hub-Funktionpublic void SendToMany(string msg, List<string> userIds)
{
try
{
//db things here
Clients.Users(userIds).sendMessage(msg);
}
catch (Exception ex)
{
Logs.Log(ex);
}
}
eine Nachricht an mehrere Benutzer senden
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)
}
}
das Problem mit dieser Linie
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);
}
}
wenn ich groß wie dies alles, was Arbeit zu werden ändern.
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' arbeitet mit User-ID, die Zeichenfolge akzeptieren sollte. Es funktioniert nicht mit der Liste der Zeichenfolge. also müssen Sie foreach verwenden, damit es funktioniert. Ich bin mir nicht sicher, wie Sie es entwerfen, aber Sie könnten "Clients.All" verwenden. es würde automatisch die Nachricht an alle Online-Clients senden – Mark
Sie sind wright 'Clients.User' Arbeit mit String' Benutzer-ID', aber ich versuche mit 'Clients.Users', die Liste der Benutzer-IDs ist – Bakri