Ich habe Nate Strausers State Machine (https://github.com/nate-strauser/meteor-statemachine) implementiert. Ich bekomme die FSM, um ihren Status erfolgreich in der Datenbank zu speichern, aber ich verfolge mehrere Instanzen. In meinem Beispiel verfolge ich den Schichtstatus von Arbeitern.Meteor State Machine
Ich möchte, dass das System beim Start des Meteors jeweils Zustände lädt. Dann möchte ich eine Zustandsänderungsanforderung für die Zustandsautomateninstanz machen und sie den Status des DB-Dokuments aktualisieren lassen (wenn diese Änderung erlaubt ist).
Wie heirate ich FSM-Instanzen zu den tatsächlichen Shift-Instanzen? Komme ich dem in die falsche Richtung? Irgendwelche Gedanken geschätzt.
Meteor.startup(function() {
var machineEvents = [
{ name: 'toggleduty', from: 'Off_Duty', to: 'On_Duty_Idle' },
{ name: 'toggleduty', from: 'On_Duty_Idle', to: 'Off_Duty' },
{ name: 'toggleduty', from: 'On_Duty_Busy', to: 'Off_Duty_Busy' },
{ name: 'toggleduty', from: 'Off_Duty_Busy', to: 'On_Duty_Busy' },
{ name: 'togglebusy', from: 'On_Duty_Idle', to: 'On_Duty_Busy' },
{ name: 'togglebusy', from: 'On_Duty_Busy', to: 'On_Duty_Idle' },
{ name: 'togglebusy', from: 'Off_Duty_Busy', to: 'Off_Duty' },
{ name: 'start', from: 'Init', to: 'On_Duty_Idle' },];
var machineCallbacks = {
ontoggleduty: function(event, from, to, shift) {
console.log('Toggling Duty', shift);
Shifts.update(shift._id, {$set: { 'status':to }});
},
ontogglebusy: function(event, from, to, shift) {
console.log('Toggling Busy', shift);
Shifts.update(shift._id, {$set: { 'status':to }});
},
};
var makeStateMachine = function(shift){
console.log('new state machine generating');
var stateMachine = StateMachine.create({
initial: shift.status,
events: machineEvents,
callbacks: machineCallbacks
});
switch (shift.state) {
case "Init":
console.log('Init to On_Duty_Idle',shift);
stateMachine.start(shift);
break;
}
};
// function killStateMachine(shift){ // not sure how to kill the specific reference
// stateMachine = null;
// }
//look for new state machines
Shifts.find({'status': 'Init'}).observe({
added: makeStateMachine,
//removed: killStateMachine
});
// In the mongo shell I trigger with db.statemachines.insert({_id:'driver1', state:'start'})
});