隐藏用户在用户列表中使用signalr

问题描述:

我正在开发一个聊天应用程序使用信号在asp.net中主要用于客户服务现在我面临问题时,一个运营商接受客户端请求私人聊天此客户端用户不应该对于除了谁接受运营商其他运营商显示,我在努力解决这个问题隐藏用户在用户列表中使用signalr

我已经写在轮毂类代码

我宣布ConnectedUsers作为

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

,并使用添加的用户

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

,并尝试使用删除私人聊天用户

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

我感到如下

chatHub.server.remove(userId, userName); 

呼吁从HTML页面的代码,但这种做法是不删除或隐藏用户用户列表

+0

您的代码无法工作,因为您从未将'item'添加到'ConnectedUsers'。这是您刚创建的对象。 请添加您管理连接用户的代码。尤其是你存储它们的地方 – Marco

+0

请编辑你的问题并添加这条信息。编辑功能就是这样。 – Marco

我将编辑编辑UserDetail类并添加属性IsAvailable

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

每默认情况下,每个用户都需要自己的 “IsAvailable” 是真实的,当他连接。 当他们接受一个私人聊天,发送通知到设置IsAvailable假服务器,针对特定的ConnectionId:

//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; 
    } 
} 

这也意味着,你不能只返回连接的用户列表中了。但是你必须先过滤它。因此,当您将该列表推送到连接的客户端时,请添加where子句ConnectedUsers.Where(x => x.IsAvailable)

这应该隐藏您的连接客户端上的所有不可用用户。