2016-10-04 3 views
0

Я реализовал машину штата Нейт Страузер (https://github.com/nate-strauser/meteor-statemachine). Я получаю FSM, чтобы сохранить его состояние в БД успешно, но я отслеживаю несколько экземпляров. В моем примере я отслеживаю статус смены работников.Meteor State Machine

Я хочу, чтобы система загружала состояния для каждого при запуске метеорита. Затем я хочу сделать запрос изменения состояния на экземпляре конечного автомата и обновить его статус документа (если это изменение разрешено).

Как я могу жениться на экземплярах FSM в реальных экземплярах Shift? Я подхожу к этому неправильно? Любые мысли оценили.

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'}) 

}); 

ответ

0

Существует изменения в вилке исходного состояния машины, которая добавляет метод transitionTo, что позволяет любому государству выбирать - я думаю, это то, что вы хотите в восстановлении состояния из базы данных. У меня есть вилка, которая объединяет несколько других народов меняет

Вы могли клонировать пакет natestrauser в местном масштабе в вашем проекте, чтобы обратиться к моему репо (хотя я не сделал релиз этого). Я намерен сделать запрос на растяжение в какой-то момент, как только мои изменения стабильны (что они кажутся).

 Смежные вопросы

  • Нет связанных вопросов^_^