我有一个问题,我希望很容易解决。在过去的几天里,我一直在寻找答案,但还没有运气。我想要做的是有一个静态字典来表示连接的客户端,最终目标是发送所有连接的客户端数据,例如其他玩家位置。无论如何,到目前为止我所做的是当客户端第一次连接时,我将它们添加到静态字典中,如下所示:
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 循环从不迭代,因为字典中似乎没有客户端。任何帮助将不胜感激,这个问题一直让我发疯!提前致谢。
-贾里德