Exemplo n.º 1
0
        public async Task<bool> Execute()
        {
            // Timer anti spam
            if (!_timer.IsFinished)
                return true;
            _timer.Reset();


            // Clean list of actions from fullfilled not repeated
            if (_toDelete.Any())
            {
                foreach (var molecule in _toDelete)
                {
                    _actions.Remove(molecule);
                }
                _toDelete.Clear();
            }

            if (_currentAction != null)
            {
                switch (_currentAction.Status.State)
                {
                    case ActionResult.Init:
                    case ActionResult.Running:
                    case ActionResult.Refresh:
                        await _currentAction.Execute();
                        GarrisonButler.Diagnostic("[Sequencer] Pulsed Action {0}, status => {1}", _currentAction.Name(), _currentAction.Status);
                        return true;

                    case ActionResult.Done:
                    case ActionResult.Failed:
                        GarrisonButler.Diagnostic("[Sequencer] Failed Action {0}, status => {1}", _currentAction.Name(), _currentAction.Status);
                        _currentAction = null;
                        break;
                }
            }

            GarrisonButler.Diagnostic("[Sequencer] Action empty, looking for new one.");

            // Find new action to perform
            foreach (var mol in _actions)
            {
                var action = mol.BigAction;
                if (action.IsFulfilled())
                {
                    //GarrisonButler.Diagnostic("[Sequencer] Skipping Action {0} since Fullfilled ****************************************************** ", action.Name());

                    if (!action.ShouldRepeat)
                    {
                        GarrisonButler.Diagnostic("[Sequencer] Action {0} will be deleted since Fullfilled ****************************************************** ", action.Name());
                        _toDelete.Add(mol);
                    }
                    continue;
                }

                if (!action.RequirementsMet())
                {
                    //GarrisonButler.Diagnostic("[Sequencer] Skipping Action {0} since Requirements not met ****************************************************** ", action.Name());
                    continue;
                }

                _currentAction = action;
                GarrisonButler.Diagnostic("[Sequencer] new Action {0}", action.Name());
                return true; 
            }

            GarrisonButler.Log("[Sequencer] All actions fulfilled, Nothing left to do.");
            return false;
        }
Exemplo n.º 2
0
 public Molecule(Atom bigAction, int priority)
 {
     BigAction = bigAction;
     Priority = priority;
 }