layout: docs.hbs

title: FSM

Finite State Machine

For more info see real Akka FSM documentation: http://doc.akka.io/docs/akka/snapshot/scala/fsm.html

public class MyFSM : FSM<int, object>
{
    public MyFSM(ActorRef target)
    {
        Target = target;
        StartWith(0, new object());
        When(0, @event =>
        {
            if (@event.FsmEvent.Equals("tick")) return GoTo(1);
            return null;
        });

        When(1, @event =>
        {
            if (@event.FsmEvent.Equals("tick")) return GoTo(0);
            return null;
        });

        WhenUnhandled(@event =>
        {
            if (@event.FsmEvent.Equals("reply")) return Stay().Replying("reply");
            return null;
        });

        Initialize();
    }

    public IActorRef Target { get; private set; }

    protected override void PreRestart(Exception reason, object message)
    {
        Target.Tell("restarted");
    }
}