检查webseite mit信号器上有多少用户并重定向新用户

时间:2017-10-10 13:15:38

标签: asp.net signalr

我是信号员的新手,并使用此示例创建了一个项目,以获取特定网站上的用户数量:Tutorial

运行正常。我的目标是仅由一个用户访问该网站,如果第二个用户想要打开他应该被重定向的页面。我怎么能这样做?

如果我检查页面上的用户并重定向,如果有多个用户,那么所有用户都会被重定向。好的,信号器应该做什么。

library(dplyr)
df3 <- row_binds(df1 = df1, df2 = df2, .id = "class")

如何将userActivity.client.updateUsersOnlineCount = function (count) { // Add the message to the page. $('#usersCount').text(count); if (count > 1) { window.document.location.href = "OPL.aspx"; } }; 存储在我可以从.cs中的代码访问的数据类型中?感谢

1 个答案:

答案 0 :(得分:1)

为此,您需要两个客户端方法。 updateUsersOnlineCount有一项工作,即在线更新用户以供所有人查看。然后,您需要第二个称为redirectTheUser的客户端方法来重定向用户。

在SignalR中心,您将实施OnConnectedOnReconnectedOnDisconnected事件,以存储(跟踪)连接ID,以及当计数达到某个阈值时,将updateUsersOnlineCount发送给所有具有Clients.All.updateUsersOnlineCount(msg), but send the message with Clients.Client(connectionId).redirectTheUser()的客户端,用于超过阈值的所有用户。

举例说明:

public override Task OnConnected()
{
    string name = Context.User.Identity.Name;  
    _connections.Add(name, Context.ConnectionId);
    // send to all above threshold
    if(_connections.Count > threshold)
          SendRedirect(_connections.Skip(threshold));
    return base.OnConnected();
}

public override Task OnDisconnected(bool stopCalled)
{
    string name = Context.User.Identity.Name;    
    _connections.Remove(name, Context.ConnectionId);    
    return base.OnDisconnected(stopCalled);
}

public override Task OnReconnected()
{
    string name = Context.User.Identity.Name;    
    if (!_connections.GetConnections(name).Contains(Context.ConnectionId))
    {
        _connections.Add(name, Context.ConnectionId);
        // send to all above threshold
        if(_connections.Count > threshold)
            SendRedirect(_connections.Skip(threshold));
    }    
    return base.OnReconnected();
}

private void SendRedirect(IEnumerable<string> connectionIds)
{
    foreach (var connectionId in connectionIds)
    {
        Clients.Client(connectionId).redirectTheUser();
    }
}