UNPKG

@wiz-code/async-fsm

Version:

Finite StateMachine JavaScript Library

83 lines (72 loc) 2.53 kB
var _ = require('underscore'); var assert = require('assert'); var Machine = require('../src/machines').Machine; var State = require('../src/states').State; var Transition = require('../src/transition'); var Region = require('../src/region'); var HistoryPseudoState = require('../src/pseudo-states').HistoryPseudoState; var machine = new Machine('my-machine'); var state1 = new State('state1', { entryAction: function () { console.log('entryAction::', this.getName()); }, doActivity: function () { console.log('doActivity::', this.getName()); }, }); var history = new HistoryPseudoState(false, true); var state1Sub1 = new State('state1-sub1', { entryAction: function () { console.log('entryAction::', this.getName()); }, doActivity: function () { console.log('doActivity::', this.getName()); }, }); var state1Sub1Sub1 = new State('state1-sub1-sub1', { entryAction: function () { console.log('entryAction::', this.getName()); }, doActivity: function () { console.log('doActivity::', this.getName()); state1Sub1Sub1ToSub2.trigger(); }, }); var state1Sub1Sub2 = new State('state1-sub1-sub2', { data: { triggered: false, }, entryAction: function () { console.log('entryAction::', this.getName()); }, doActivity: function () { console.log('doActivity::', this.getName()); if (!this.get('triggered')) { this.set('triggered', true); state1ToState2.trigger(); } }, }); var state2 = new State('state2', { entryAction: function () { console.log('entryAction::', this.getName()); }, doActivity: function () { console.log('doActivity::', this.getName()); state2ToState1.trigger(); } }); machine.addState(state1, state2); state1.addState(state1Sub1, history); state1Sub1.addState(state1Sub1Sub1, state1Sub1Sub2); var toState1 = new Transition(false, false, state1); var toState1Sub1 = new Transition(false, false, state1Sub1); var toState1Sub1Sub1 = new Transition(false, false, state1Sub1Sub1); var state1Sub1Sub1ToSub2 = new Transition(false, state1Sub1Sub1, state1Sub1Sub2); var state1ToState2 = new Transition(false, state1, state2); var state2ToState1 = new Transition(false, state2, state1); machine.addTransition(toState1, state1ToState2, state2ToState1); state1.addTransition(toState1Sub1); state1Sub1.addTransition(toState1Sub1Sub1, state1Sub1Sub1ToSub2); machine.deploy(); machine.start();