2017-03-03 5 views
1

Ich entwickle eine Chat-Anwendung mit Signal in asp.net, die hauptsächlich für den Kundendienst verwendet wird jetzt habe ich Problem konfrontiert, wenn ein Betreiber die Client-Anfrage für private Chat akzeptiert dieser Client-Benutzer nicht sein sollte für andere Betreiber außer dem Bediener angezeigt, der akzeptiert, bin ich kämpfen, dieses Problem zu lösenBenutzer in der Benutzerliste mit Signaler ausblenden

der Code i in Naben Klasse geschrieben haben, ist

i CONNECTED als

static List<UserDetail> ConnectedUsers = new List<UserDetail>(); 

und hinzugefügt, dass Benutzer erklärt haben, unter Verwendung von

ConnectedUsers.Add(new UserDetail { ConnectionId = id, UserName = userName }); 

und versucht, private Chat-Benutzer zu entfernen, mit

public void Remove(string UserId, string User) 
    { 
     UserDetail item = new UserDetail(); 
     item.ConnectionId = UserId; 
     item.UserName = User; 
     if (item != null) 
     { 
      ConnectedUsers.Remove(item); 
     } 
    } 

ich diesen Code von HTML-Seite nenne als

chatHub.server.remove(userId, userName); 

folgt aber dieser Ansatz zu entfernen ist nicht oder dem Benutzer versteckt aus userlist

+0

Ihr Code kann nicht funktionieren, da Sie "item" nie zu "ConnectedUsers" hinzugefügt haben. Dies ist ein Objekt, das Sie gerade erstellt haben. Fügen Sie den Code hinzu, mit dem Sie Ihre verbundenen Benutzer verwalten. Vor allem, wo Sie sie speichern – Marco

+0

Bitte bearbeiten Sie Ihre Frage und fügen Sie diese Information hinzu. Dafür ist die Bearbeitungsfunktion da. – Marco

Antwort

0

Ich würde bearbeiten Bearbeiten Sie die UserDetail Klasse und fügen Sie eine Eigenschaft 01 hinzu:

public class UserDetail { 
    //Guid or string? edit accordingly 
    public string ConnectionId { get; set;} 
    public string UserName { get; set; } 
    public bool IsAvailable { get; set; } 
} 

Pro standardmäßig jeder Benutzer braucht, um seinen "IsAvailable", um wahr zu sein, wenn er verbindet. Wenn sie einen privaten Chat, senden Sie eine Benachrichtigung an den Server übernehmen, die IsAvailable auf false, für diesen bestimmten ConnectionId setzt:

//you don't really need the user name, id is sufficient 
public void Remove(string UserId, string User) { 
    var user = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == UserId); 
    if(user != null) { 
     user.IsAvailable = false; 
    } 
} 

Das bedeutet auch, die Liste der verbundenen Benutzer zurück nicht nur zurückkehren können. Aber du musst es zuerst filtern. Wenn Sie diese Liste an Ihre verbundenen Clients weitergeben, fügen Sie eine Where-Klausel ConnectedUsers.Where(x => x.IsAvailable) hinzu.

Das sollte alle nicht verfügbaren Benutzer auf Ihren verbundenen Clients verbergen.

Verwandte Themen