2017-02-08 1 views
0

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-Funktion
public 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); 
     } 
    } 
+0

'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

+0

Sie sind wright 'Clients.User' Arbeit mit String' Benutzer-ID', aber ich versuche mit 'Clients.Users', die Liste der Benutzer-IDs ist – Bakri

Antwort

1
  • Zuerst müssen Sie Ihre hub vor deklarieren ‚Senden‘ starten.
  • Zweitens sollten Sie Ihre Broadcast function in die Hauptfunktion, die Variable Chat deklariert setzen.

so etwas wie dies funktionieren sollte:

$(function() { 
    var chat = $.connection.chatHub; 
    chat.client.sendMessage= function (msg) { 
     $('.msgs').append('<div>'+ group.Name + '</div>'); 
     $('#' + group.Id).click(); 
    } 
    $.connection.hub.start().done(function() { 
     var chatids = new Array(); 
     $('.ckusergr').each(function() { 
      if ($(this).is(':checked')) { 
       chatids.push($(this).attr('iid')); 
      } 
     }) 
     chat.server.sendToMany($('.txtmsg').val(), chatids); 
    }); 
}) 
+0

Ich starte bereits den Hub , aber ich habe vergessen, die Frage zu senden. Ich habe auch versucht, die Broadcast-Funktion innerhalb der Hauptfunktion zu setzen, aber das gleiche, die sendMessage-Funktion wird nicht ausgelöst. Ich bearbeite die Frage, um klarer zu sein – Bakri

1

Ich hatte ähnliches Problem heute, und ich finde, wenn ich als Parameter senden List<string>, die alle Benutzernamen in Clients.Users(list of usernames) enthält irgendwie wird es auch funktionieren.

Das fand ich durch Zufall, vielleicht jemand mit besseren Erfahrungen klären kann, warum dies, da diese Arbeit nur IList<string> userIds

+1

'IList ' ist Schnittstelle, während 'List ' ist Klasse Inherit von IList, also akzeptiert der Parameter die ganze Klasse, die vererbt wird von 'IList ' – Bakri

+1

Dank für Erklärung – Martin