Akka FSM超时通知

时间:2016-03-27 09:05:33

标签: akka akka-fsm

我正在开发一款游戏,游戏逻辑/状态本身由Akka FSM演员管理。我的一个状态是WaitingForAnswer,与此状态相关的业务逻辑是玩家(也是演员)必须在20秒内回答,否则他/她会失去一分。所以我定义了这样的状态:

when(WaitingForAnswer, 20 seconds) {
    // event handling logic here
}

到目前为止一切顺利。现在我要做的是提供一些提醒 - 在状态超时的一半过去之后(10秒之后),我想向播放器发送提醒,他必须回答很快。

我的想法:

  1. 通过将setTimer(name, msg, interval, repeat)设置为10秒,在进入WaitingForAnswer状态时使用interval。这样我的FSM演员就会得到提醒,提醒他提醒演员。正如你所看到的那样,这有点......不太酷。

  2. 使用调度程序,一旦我的FSM actor进入WaitingForAnswer状态,将来将玩家角色作为收件人安排10秒的消息。当然,在这种情况下,我必须确保在玩家角色及时响应时取消预定的消息。

  3. 还有其他更自然的方式来实现这一目标吗?某种钩子?某种方式将setTimer与不同的收件人一起使用?

1 个答案:

答案 0 :(得分:1)

您解释问题的方式,似乎您的状态 WaitingForAnswer 实际上是2个不同的状态,其行为非常相似。您可以将状态超时定义为10秒,如果播放器应答,则应用逻辑,否则,您将状态转换为 WaitingForAnswerAfterReminder ,再次使用10秒状态超时,该状态超时由与以前的状态。

对我而言,您尝试在 WaitingForAnswer 中建模两个状态:在提醒之前和之后。