0

我有一个问题,我希望很容易解决。在过去的几天里,我一直在寻找答案,但还没有运气。我想要做的是有一个静态字典来表示连接的客户端,最终目标是发送所有连接的客户端数据,例如其他玩家位置。无论如何,到目前为止我所做的是当客户端第一次连接时,我将它们添加到静态字典中,如下所示:

RegionServer.RegionClients.Add(UserId, this);
Log.DebugFormat("Added peer to region list");

foreach (var client in RegionServer.RegionClients)
{
     Log.DebugFormat("Client id in list : {0}", client.Key);
}

我在调试语句中添加了以确保客户端确实被添加到列表中,它就是。

然后在我的主文件中,我有:

public override  void InitBackgroundThreads()
    {
        ThreadPool.QueueUserWorkItem(SendUpdatesToAll);
    }

public void SendUpdatesToAll(object threadContext)
    {
        Stopwatch timer = new Stopwatch();
        timer.Start();
        isRunning = true;

        while (isRunning)
        {
            if (timer.Elapsed < TimeSpan.FromMilliseconds(100))
                continue;

            Update(timer.Elapsed);
            timer.Restart();
        }
    }

public void Update(TimeSpan elapsed)
    {

        foreach (KeyValuePair<Guid, Unity3dPeer> peer in RegionClients)
                {
                    Log.DebugFormat("Inside the foreach statement");
                }

在我的调试日志中,我可以看到循环确实在循环,但 RegionClients 字典值从未更新。foreach 循环从不迭代,因为字典中似乎没有客户端。任何帮助将不胜感激,这个问题一直让我发疯!提前致谢。

-贾里德

4

1 回答 1

0

事实证明这很简单。我有一个集群服务器正在运行,我试图从不同的进程中引用这本字典......呃。感谢您的想法,事实证明它比尝试线程安全更简单。

于 2012-11-26T21:10:50.437 回答