在OnConnected方法中,客户端将使用其名称添加到组(该组包含所有客户端ID),然后将其名称添加到列表(如果不存在)。

static List<string> onlineClients = new List<string>(); // list of clients names

public override Task OnConnected()
{
    Groups.Add(Context.ConnectionId, Context.User.Identity.Name);

    if (!onlineClients.Exists(x => x == Context.User.Identity.Name))
    {
        onlineClients.Add(Context.User.Identity.Name);
    }

    return base.OnConnected();
}

在OnDisconnected方法中,我试图测试该组是否为空以从列表中删除元素。但是,删除最后一个连接后,该组将不为空。
public override Task OnDisconnected(bool stopCalled)
{
    if (stopCalled)
    {
        // We know that Stop() was called on the client,
        // and the connection shut down gracefully.

        Groups.Remove(Context.ConnectionId, Context.User.Identity.Name);

        if (Clients.Group(Context.User.Identity.Name) == null)
        {
            onlineClients.Remove(Context.User.Identity.Name);
        }

    }
    return base.OnDisconnected(stopCalled);
}

我可以检查空组吗?

最佳答案

我认为这将是对您的问题的较晚答复,也许您已经忘记了:d

我使用包含组名(User.Identity.Name)及其客户编号的字典解决了我的问题,如下所示。

private static Dictionary<string, int> onlineClientCounts  = new Dictionary<string, int>();

public override Task OnConnected()
{
    var IdentityName = Context.User.Identity.Name;
    Groups.Add(Context.ConnectionId, IdentityName);

    int count = 0;
    if (onlineClientCounts.TryGetValue(IdentityName, out count))
        onlineClientCounts[IdentityName] = count + 1;//increment client number
    else
        onlineClientCounts.Add(IdentityName, 1);// add group and set its client number to 1

    return base.OnConnected();
}

public override Task OnDisconnected(bool stopCalled)
{
    var IdentityName = Context.User.Identity.Name;
    Groups.Remove(Context.ConnectionId, IdentityName);

    int count = 0;
    if (onlineClientCounts.TryGetValue(IdentityName, out count))
    {
        if (count == 1)//if group contains only 1client
            onlineClientCounts.Remove(IdentityName);
        else
            onlineClientCounts[IdentityName] = count - 1;
    }

    return base.OnDisconnected(stopCalled);
}

关于asp.net-mvc-4 - 检查组是否为空SignalR?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25957312/

10-16 19:34