Define a state transition
var fsm = new IgeFSM();
fsm.defineState('idle', {
enter: function (data, completeCallback) {
console.log('entered idle state');
completeCallback();
},
exit: function (data, completeCallback) {
console.log('exited idle state');
completeCallback();
}
});
fsm.defineState('moving', {
enter: function (data, completeCallback) {
console.log('entered moving state');
completeCallback();
},
exit: function (data, completeCallback) {
console.log('exited moving state');
completeCallback();
}
});
fsm.defineTransition('idle', 'moving', function (data, callback) {
if (data === 'ok') {
callback(false);
} else {
callback('Some error string, or true or any data');
}
});
fsm.enterState('moving', 'notOk', function (err, data) {
if (!err) {
console.log('State changed!', fsm.currentStateName());
} else {
console.log('State did NOT change!', fsm.currentStateName());
}
});
fsm.enterState('moving', 'ok', function (err, data) {
if (!err) {
console.log('State changed!', fsm.currentStateName());
} else {
console.log('State did NOT change!', fsm.currentStateName());
}
});