@wiz-code/async-fsm
Version:
Finite StateMachine JavaScript Library
83 lines (72 loc) • 2.53 kB
JavaScript
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();