UNPKG

@wiz-code/async-fsm

Version:

Finite StateMachine JavaScript Library

129 lines (116 loc) 2.8 kB
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();