/ / Akka: come verificare quale comportamento ha attualmente l'attore - scala, akka

Akka: come verificare quale comportamento ha l'attore al momento - scala, akka

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 № 1

Puoi 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.