Il mio attore ha due comportamenti:
context.become(running)
context.become(stopped)
Come determinare nello stesso attore, qual è il comportamento corrente? Ecco il codice completo: http://pastie.org/private/r1dfdss62kcz9e2fzorrq
Nuova versione http://pastie.org/private/b2h65n2dthjhxlnuq5caw
Ho deciso di spostare il codice sui collegamenti perché StackOverflow non mi permette di postare il codice qui.
risposte:
0 per risposta № 1Puoi usare Akka FSM per implementare lo stesso comportamento invece di usare diventare. Con Akka FSM, devi essere in grado di registrarti per le notifiche di modifica dello stato. Fare riferimento 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
}
}
}
Con questo, gli attori interessati possono inviare un SubscribeTransitionCallBack(self)
al EventFeedActor e riceveranno CurrentState(actorRef, stateName)
immediatamente e a Transition(actorRef, oldState, newState)
su ogni ulteriore transizione di stato.