【问题标题】:How to run timer for each user on server如何为服务器上的每个用户运行计时器
【发布时间】:2019-04-08 17:15:10
【问题描述】:

我正在开发简单的游戏服务器,它应该像这样工作:

  1. 用户连接到服务器并启动计时器,将变量 Quest 设置为 true
  2. 计时器将倒计时 X 秒
  3. 用户可以断开与服务器的连接,然后从相同或不同的设备重新连接以检查计时器进度(如果变量 Quest == true,则任务正在进行中)
  4. 当计时器到0时,它会将Quest设置为false

服务器应该同时处理多个用户。

我的问题:我已经完成了第 1 部分和第 2 部分,但我不知道如何将变量连接到某个用户名。任何帮助将不胜感激

【问题讨论】:

  • 当用户断开连接时,您需要将时间与他们的用户名一起存储在某处,例如在数据库中。然后,当他们使用相同的用户名重新连接时,您可以通过使用该用户名进行搜索来从存储中获取值。显然,如果变量在那段时间是静态的,您需要计算自存储值以来经过的时间,并在将其提供给用户之前对其进行更新。因此,当您第一次存储它时,将当时的时间也存储起来是明智的
  • 不要使用计时器。为任务设置截止日期,例如如果您使用一小时计时器,请将截止日期设置为DateTime.Now.AddHours(1)。那么他们是否登录或注销都没有关系,您不必维护计时器。

标签: c# server


【解决方案1】:

如果你目前有类似的东西:

class GameServer {
    Timer questTimer;
    bool quest;
    // ...

那么您可能希望将该全局状态封装到每个玩家自己的类中:

class PlayerState {
    Timer questTimer;
    bool quest;
}

并有一个Dictionary,由每个玩家状态的玩家名称键入:

class GameServer {
    Dictionary<string, PlayerState> states = new Dictionary<string, PlayerState>();
    // ...

操纵字典超出了这个问题的范围——上面链接的文章应该会给你一些想法。

【讨论】:

  • 等等.....我不敢相信我完全忘记了字典 xd。这个答案应该可以解决问题,对不起愚蠢的问题:D
猜你喜欢
  • 2019-07-16
  • 2019-07-03
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多