@wiz-code/async-fsm
Version:
Finite StateMachine JavaScript Library
129 lines (116 loc) • 2.8 kB
JavaScript
var _ = require('underscore');
var FSM = require('../src/async-fsm');
var machine = new FSM.Machine('my-machine');
var s1 = new FSM.State('s1', {
data: {
user: {
id: [
'hoge-san'
]
}
},
props: {
account: 'foo-bar'
},
methods: {
watcher: function (val) {
return val === 100;
},
},
//loop: true,
fps: 1,
entryAction: function (t) {
if (!_.isNull(t)) {
console.log(t.get('initialValue'));
}
//t2.watch('', this.methods.watcher);
},
doActivity: function (t) {
if (!_.isNull(t)) {
console.log(t.get('initialValue'));
}
//t2.trigger(100, 100);
t3.trigger();
},
exitAction: function (t) {
if (!_.isNull(t)) {
console.log(t.get('nextValue'));
}
console.log(t.get('value'));
},
});
var s2 = new FSM.State('s2', {
//autoTransition: true,
entryAction: function (t) {
if (_.isNull(t)) {
return;
}
console.log('\nTransition id: ', t.getId(), '\nState name: ', this.getName(), ' entry');
},
doActivity: function (t) {
if (_.isNull(t)) {
return;
}
console.log('\nTransition id: ', t.getId(), '\nState name: ', this.getName(), ' do');
},
exitAction: function (t) {
if (_.isNull(t)) {
return;
}
console.log(t.get('value'));
},
});
var enp = new FSM.EntryPointPseudoState(false);
var s2s1 = new FSM.State('s2s1', {
//autoTransition: true,
entryAction: function (t) {
if (_.isNull(t)) {
return;
}
console.log(t.get('value'));
},
doActivity: function (t) {
if (_.isNull(t)) {
return;
}
console.log(t.get('value'));
},
exitAction: function (t) {
if (_.isNull(t)) {
return;
}
console.log(t.get('value'));
},
});
var t1 = new FSM.Transition(false, FSM.InitialPseudoState, s1, {
data: {
initialValue: 'Welcome to FSM World!',
},
});
var t2 = new FSM.Transition(false, s1, s2, {
data: {
nextValue: 'FSM World\'s guide.',
},
guard: function (a, b) {
return a * b === 10000;
},
effect: function (a, b) {
console.log('effect: ', a, b);
}
});
var t3 = new FSM.Transition(false, s1, enp, {
data: {
value: 'Transit to "entry point".',
},
});
var t4 = new FSM.Transition(false, enp, s2s1, {
data: {
value: 'Transit from "entry point".',
},
});
machine.addState(s1, s2);
s2.addState(enp, s2s1);
machine.addTransition(t1, t2, t3);
s2.addTransition(t4);
machine.deploy();
machine.start();