我是信号员的新手,并使用此示例创建了一个项目,以获取特定网站上的用户数量: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中的代码访问的数据类型中?感谢
答案 0 :(得分:1)
为此,您需要两个客户端方法。 updateUsersOnlineCount
有一项工作,即在线更新用户以供所有人查看。然后,您需要第二个称为redirectTheUser
的客户端方法来重定向用户。
在SignalR中心,您将实施OnConnected
,OnReconnected
,OnDisconnected
事件,以存储(跟踪)连接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();
}
}