我的演员有两种行为:
context.become(running)
context.become(stopped)
如何在同一个演员中确定当前的行为是什么?这是完整的代码: http://pastie.org/private/r1dfdss62kcz9e2fzorrq
新版本 http://pastie.org/private/b2h65n2dthjhxlnuq5caw
我决定将代码移动到链接,因为stackoverflow不允许我在这里发布代码。
答案 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)
。