Akka:如何检查演员目前的行为

时间:2014-09-12 18:21:39

标签: scala akka

我的演员有两种行为:

context.become(running)
context.become(stopped)

如何在同一个演员中确定当前的行为是什么?这是完整的代码: http://pastie.org/private/r1dfdss62kcz9e2fzorrq

新版本 http://pastie.org/private/b2h65n2dthjhxlnuq5caw

我决定将代码移动到链接,因为stackoverflow不允许我在这里发布代码。

1 个答案:

答案 0 :(得分:0)

您可以使用Akka FSM实现相同的行为,而不是使用“成为”。使用Akka FSM,您必须能够注册状态更改通知。请参阅http://doc.akka.io/docs/akka/snapshot/scala/fsm.html#External_Monitoring

sealed trait State
case object Running extends State
case object Stopped extends State

case object Data

case object KeepAlive
case object Stop
case object CheckIfRunning

class EventsFeedActor extends Actor with FSM[State, Data.type] {
  startWith(Stopped, Data)
  when(Stopped) {
    case Event(KeepAlive, Data) => {
      ???
      goto(Running)
    }
    case Event(CheckIfRunning, Data) => {
      ???
      stay
    }
  }

  when(Running) {
    case Event(Stop, Data) => {
      ???
      goto(Stopped)
    }
    case Event(CheckIfRunning, Data) => {
      ???
      stay
    }
  }
}

有了这个,有兴趣的演员可以向EventFeedActor发送SubscribeTransitionCallBack(self)并立即收到CurrentState(actorRef, stateName),并在每次进一步的状态转换时收到Transition(actorRef, oldState, newState)