EFM
Vous pouvez utiliser FSM
. stateName
donne le nom de l'état. Ping l'acteur avec un message spécial géré dans chaque état pour envoyer le nom d'état.
sealed trait ExampleState
case object State1 extends ExampleState
case object State2 extends ExampleState
case object C extends ExampleState
import akka.actor.{Actor, FSM}
import akka.event.EventHandler
import akka.util.duration._
case object Move
class ABC extends Actor with FSM[ExampleState, Unit] {
import FSM._
startWith(State1, Unit)
when(State1) {
case Ev(Move) =>
EventHandler.info(this, "Go to B and move on after 5 seconds")
goto(state2) forMax (5 seconds)
}
when(State2) {
case Ev(StateTimeout) =>
EventHandler.info(this, "Moving to C")
goto(C)
}
when(C) {
case Ev(Move) =>
EventHandler.info(this, "Stopping")
stop
}
initialize // this checks validity of the initial state and sets up timeout if needed
}
Hacky Solution
Acteur Akka ne stocke pas d'informations spécifiques sur la fonction partielle. Donc, je ne pense pas qu'il y aura une fonction akka lib facilement disponible pour cela.
Avoir state
à l'intérieur de l'acteur, puis mettre à jour l'état lorsque l'acteur tente de devenir quelque chose.
class FooBar extends Actor with ActorLogging {
var state: Option[String] = Some("receive")
override def receive: Receive = {
case _ => context become state1()
}
def state1:() => Receive = {
() => {
state = Some("state1")
{
case _ => log error "ignore"
}
}
}
def state2:() => Receive = {
() => {
state = Some("state2")
{
case _ => log error "ignore"
}
}
}
}
Il est appelé * encapsulation * et il est une caractéristique: http://doc.akka.io/docs/akka/snapshot/general/actor-systems.html#Actor_Best_Practices – rethab
Je suis désolé mais je ne le font pas Comprenez vous commentez. – Simon