C# 信号器中的会话数据:存储在哪里?

C# 信号器中的会话数据:存储在哪里?,c#,signalr,signalr-hub,C#,Signalr,Signalr Hub,让我们假设我有一个游戏,它使用信号器在客户端之间共享信息。在我的Hub类中,我有一个名为“joinGame()”的方法,当某个客户机想要加入时会调用该方法。我需要将他的ID添加到某个数组中,以知道他已经加入了游戏。它不需要在数据库中,因为我只在这个会话期间需要这些信息 public class GameHub : Hub { public List<int> Players = new List<int>(); public void joinGame(

让我们假设我有一个游戏,它使用信号器在客户端之间共享信息。在我的Hub类中,我有一个名为“joinGame()”的方法,当某个客户机想要加入时会调用该方法。我需要将他的ID添加到某个数组中,以知道他已经加入了游戏。它不需要在数据库中,因为我只在这个会话期间需要这些信息

public class GameHub : Hub
{
    public List<int> Players = new List<int>();

    public void joinGame(int id) //player updates his position
    {
         Clients.All.newPlayer(id);
         Players.Add(id);
    }
}
公共类游戏中心:中心
{
公共列表玩家=新列表();
public void joinGame(int id)//玩家更新其位置
{
Clients.All.newPlayer(id);
玩家。添加(id);
}
}
这段代码不起作用,因为每次调用“joinGame()”函数时,“Players”变量似乎都会被清除

我如何才能正确地执行此操作?

您可以使用:


为什么要使用自己的ID,而不是使用连接ID正如我在文档中看到的,组是只能存储用户信息的对象。但是如果我也想存储一些其他数据呢?比如:每个玩家的分数,或者开始游戏的时间?我可以检查玩家是否已经加入到小组中吗?为了防止多次添加同一播放机,您还可以使用包含当前已连接用户的静态变量并覆盖OnConnected方法,您还可以存储任何其他需要的内容以及连接ID
public async Task JoinGame(int id)
{
    await Groups.Add(Context.ConnectionId, id);
    Clients.All.newPlayer(id);
}