/ / Akka: jak sprawdzić, jakie zachowanie ma aktor w tej chwili - scala, akka

Akka: jak sprawdzić, jakie zachowanie ma aktor w tej chwili - scala, akka

Mój aktor ma dwa zachowania:

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

Jak określić w tym samym aktorze, jakie jest obecne zachowanie? Oto pełny kod: http://pastie.org/private/r1dfdss62kcz9e2fzorrq

Nowa wersja http://pastie.org/private/b2h65n2dthjhxlnuq5caw

Postanowiłem przenieść kod do linków, ponieważ stackoverflow nie pozwala mi opublikować kodu tutaj.

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz użyć programu Akka FSM, aby zaimplementować to samo zachowanie, zamiast używać polecenia stań. W przypadku programu Akka FSM musisz mieć możliwość rejestrowania powiadomień o zmianach stanu. Odnosić się 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
}
}
}

Dzięki temu zainteresowani aktorzy mogą wysłać SubscribeTransitionCallBack(self) do EventFeedActor i otrzyma CurrentState(actorRef, stateName) natychmiast i Transition(actorRef, oldState, newState) przy każdej dalszej zmianie stanu.