示例#1
0
        public void Specifying_an_event_activity()
        {
            Event Initialized = null;
            Event Finish      = null;

            _instance = new Instance();
            _machine  = AutomatonymousStateMachine <Instance>
                        .New(builder => builder
                             .State("Running", out Running)
                             .Event("Initialized", out Initialized)
                             .Event("Finish", out Finish)
                             .During(builder.Initial)
                             .When(Initialized, b => b.TransitionTo(Running))
                             .During(Running)
                             .When(Finish, b => b.Finalize())
                             );

            _observer = new StateChangeObserver <Instance>();

            using (IDisposable subscription = _machine.ConnectStateObserver(_observer))
            {
                _machine.RaiseEvent(_instance, Initialized).Wait();
                _machine.RaiseEvent(_instance, Finish).Wait();
            }
        }
示例#2
0
        public void Specifying_an_event_activity()
        {
            Event Initialized = null;
            Event LegCramped  = null;
            Event Finish      = null;
            Event Recovered   = null;

            _instance = new Instance();
            _machine  = AutomatonymousStateMachine <Instance>
                        .New(builder => builder
                             .State("Running", out Running)
                             .Event("Initialized", out Initialized)
                             .Event("LegCramped", out LegCramped)
                             .Event("Finish", out Finish)
                             .Event("Recovered", out Recovered)
                             .SubState("Resting", Running, out Resting)
                             .During(builder.Initial)
                             .When(Initialized, b => b.TransitionTo(Running))
                             .During(Running)
                             .When(LegCramped, b => b.TransitionTo(Resting))
                             .When(Finish, b => b.Finalize())
                             .During(Resting)
                             .When(Recovered, b => b.TransitionTo(Running))
                             .WhenEnter(Running, b => b.Then(context => { }))
                             .WhenLeave(Running, b => b.Then(context => { }))
                             .BeforeEnter(Running, b => b.Then(context => { }))
                             .AfterLeave(Running, b => b.Then(context => { }))
                             );

            _observer      = new StateChangeObserver <Instance>();
            _eventObserver = new EventRaisedObserver <Instance>();

            using (IDisposable subscription = _machine.ConnectStateObserver(_observer))
                using (IDisposable beforeEnterSub = _machine.ConnectEventObserver(Running.BeforeEnter, _eventObserver))
                    using (IDisposable afterLeaveSub = _machine.ConnectEventObserver(Running.AfterLeave, _eventObserver))
                    {
                        _machine.RaiseEvent(_instance, Initialized).Wait();
                        _machine.RaiseEvent(_instance, LegCramped).Wait();
                        _machine.RaiseEvent(_instance, Recovered).Wait();
                        _machine.RaiseEvent(_instance, Finish).Wait();
                    }
        }
        public void Specifying_an_event_activity()
        {
            _instance = new Instance();
            _machine  = AutomatonymousStateMachine <Instance>
                        .New(builder => builder
                             .State("Running", out Running)
                             .Event("Initialized", out Event Initialized)
                             .Event("Finish", out Event Finish)
                             .During(builder.Initial)
                             .When(Initialized, b => b.TransitionTo(Running))
                             .During(Running)
                             .When(Finish, b => b.Finalize())
                             .WhenEnter(Running, x => x.Then(context => context.Instance.EnterCalled = true))
                             );

            _observer = new StateChangeObserver <Instance>();

            using (IDisposable subscription = _machine.ConnectStateObserver(_observer))
            {
                _machine.TransitionToState(_instance, Running)
                .Wait();
            }
        }