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

时间:2017-03-03 06:51:48

标签: asp.net signalr

我正在使用asp.net中的信号器开发一个聊天应用程序,主要用于客户服务现在我遇到问题当一个操作员接受客户端私人聊天请求时,除了操作员之外,其他操作员不应该显示该客户端用户谁接受了,我正在努力解决这个问题

我在集线器类中编写的代码是

我已将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);
        }
    }

我从html页面调用此代码如下

chatHub.server.remove(userId, userName);

但这种方法不是从用户列表中删除或隐藏用户

1 个答案:

答案 0 :(得分:0)

我会编辑编辑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; }
}

默认情况下,每个用户都需要他的&#34; IsAvailable&#34;当他连接时是真的。 当他们接受私人聊天时,向该服务器发送一个通知,该通知将IsAvailable设置为false,用于该特定的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)

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