我需要检查特定用户是否仍连。
我有以下HashSet的,用于跟踪用户的:
public static class UserHandler
{
public static HashSet<string> ConnectedIds = new HashSet<string>();
}
因此,在断开连接:
public override Task OnDisconnected()
{
UserHandler.ConnectedIds.Remove(this.Context.ConnectionId);
if (UserHandler.ConnectedIds.Count == 0)
{
// STOP TASK -> SET CANCELLATION
}
return base.OnDisconnected();
}
和连接:
public override Task OnConnected()
{
Logger.Log.file.Info("[TaskActionStatus HUB => OnConnected] Start");
UserHandler.ConnectedIds.Add(this.Context.ConnectionId);
// start task only if at least one listener
if (UserHandler.ConnectedIds.Count < 2)
{
// START A TASK -> (WHILE LOOP THAT GETS DATA FROM DB EVERY 2 SEC)
}
return base.OnConnected();
}
现在,当用户只需关闭他/她的浏览器窗口中出现问题。 没有办法,我知道,如果他/她断开。
因此,基于一些问题在这里 ,我所说的每一个客户,并得到回应。 我不知道该怎么做。
我想我会有这样的:
public static void CheckConnectedUsers()
{
var context = GlobalHost.ConnectionManager.GetHubContext<TaskActionStatus>();
foreach (var connection in UserHandler.ConnectedIds)
{
context.Clients.Client(connection).verifyConnected("online?");
}
}
但我怎么得到响应,形成客户端?
编辑:这是执行的步骤:
我需要因为连接的用户的确切数目。如果有至少一个用户连接我要开始的任务。 我想,以确保只有1任务正在运行的所有连接的用户<2(启动任务)。 假设这样的情况:2个用户查看使用signalR的页面。 HashSet的现在有两个ID和任务正在运行。 一关闭他/她的浏览器,并在几秒钟后,另一刷新他/她。 现在,第一个(即关闭了他/她的浏览器没有执行OnDisconnected方法,这样的HashSet仍然有他/她的ConnectionId的一个,和一个“刷新”没有执行OnDisonnected然后OnConnected这增加了他的ConnectionId到HashSet的。因此,而不是只有1一个HashSet的ConnectionId和启动任务,HashSet的包含2个(老不再连接,并且刚刚更新了他/她的浏览器中的一个),任务从来没有得到重新开始。
谢谢