示例#1
0
        private TriggerStateMachine <ScreenState, ScreenEvent, Task> BuildStateMachine()
        {
            // Initializing → Created → Destroyed
            //                  ↓ ↑
            //                Resumed
            //                  ↓ ↑
            //                Focused
            var fsm = new TriggerStateMachine <ScreenState, ScreenEvent, Task>(ScreenState.Initializing);

            fsm.On(ScreenEvent.Create)
            .Allow(ScreenState.Initializing, ScreenState.Created, ExecTransition(OnCreate))
            .Allow(ScreenState.Created, ScreenState.Created);

            fsm.On(ScreenEvent.Resume)
            .Allow(ScreenState.Created, ScreenState.Resumed, ExecTransition(OnResume, ScreenEvent.Resume))
            .Allow(ScreenState.Resumed, ScreenState.Resumed);

            fsm.On(ScreenEvent.Focus)
            .Allow(ScreenState.Created, ScreenState.Resumed, ExecTransition(OnResume, ScreenEvent.Focus))
            .Allow(ScreenState.Resumed, ScreenState.Focused, ExecTransition(OnFocus))
            .Allow(ScreenState.Focused, ScreenState.Focused);

            fsm.On(ScreenEvent.Unfocus)
            .Allow(ScreenState.Focused, ScreenState.Resumed, ExecTransition(OnFocusLost))
            .Allow(ScreenState.Resumed, ScreenState.Resumed);

            fsm.On(ScreenEvent.Pause)
            .Allow(ScreenState.Focused, ScreenState.Resumed, ExecTransition(OnFocusLost, ScreenEvent.Pause))
            .Allow(ScreenState.Resumed, ScreenState.Created, ExecTransition(OnPause))
            .Allow(ScreenState.Created, ScreenState.Created);

            fsm.On(ScreenEvent.Destroy)
            .Allow(ScreenState.Focused, ScreenState.Resumed, ExecTransition(OnFocusLost, ScreenEvent.Destroy))
            .Allow(ScreenState.Resumed, ScreenState.Created, ExecTransition(OnPause, ScreenEvent.Destroy))
            .Allow(ScreenState.Created, ScreenState.Destroyed, ExecTransition(OnDestroy))
            .Allow(ScreenState.Destroyed, ScreenState.Destroyed);

            return(fsm);
        }
 public Builder(TriggerStateMachine <TState, TTrigger, TResult> machine, TTrigger trigger)
 {
     _machine = machine;
     _trigger = trigger;
 }
示例#3
0
 protected Route(RouteSettings settings)
 {
     _settings = settings;
     _machine  = BuildStateMachine();
 }