Beispiel #1
0
 public void Initialize(StateDefinition definition)
 {
     ID       = definition.ID;
     Category = definition.Category;
     if (definition.ActionsOnEntry == null)
     {
         return;
     }
     foreach (ActionDefinition actionDef in definition.ActionsOnEntry)
     {
         CLRLogger.GetInstance().LogDevInfo(string.Format("Load {0}", actionDef.Class));
         try
         {
             IAction action = _actionBuilder.Build(actionDef);
             _actionsOnEntry.Add(action);
         }
         catch (Exception ex)
         {
             CLRLogger.GetInstance().LogDevInfo(string.Format("Failed to load {0}", actionDef.Class));
             CLRLogger.GetInstance().LogDevError(ex.Message);
         }
     }
     if (definition.ActionsOnExit == null)
     {
         return;
     }
     foreach (ActionDefinition actionDef in definition.ActionsOnExit)
     {
         CLRLogger.GetInstance().LogDevInfo(string.Format("Load {0}", actionDef.Class));
         try
         {
             IAction action = _actionBuilder.Build(actionDef);
             _actionsOnExit.Add(action);
         }
         catch (Exception ex)
         {
             CLRLogger.GetInstance().LogDevInfo(string.Format("Failed to load {0}", actionDef.Class));
             CLRLogger.GetInstance().LogDevError(ex.Message);
         }
     }
 }
Beispiel #2
0
        private void LoadTransaction(TransitionDefinition def)
        {
            CLRLogger.GetInstance().LogDevInfo(string.Format("Load Transaction {0}:{1}->{2}", def.ID, def.From, def.To));
            Transition tran = new Transition();

            tran.ID   = def.ID;
            tran.From = GetStateById(def.From);
            if (tran.From == null)
            {
                if (def.From == "*")
                {
                    foreach (State state in States)
                    {
                        TransitionDefinition tranDef = new TransitionDefinition();
                        tranDef.ID      = def.ID;
                        tranDef.From    = state.ID;
                        tranDef.Actions = def.Actions;
                        tranDef.To      = def.To;
                        if (tranDef.To == "*")
                        {
                            tranDef.To = state.ID;
                        }
                        LoadTransaction(tranDef);
                    }
                }
                else
                {
                    throw new StateMachineException(string.Format("Invalid TransactionDefinition {0}:{1}->{2}, no such state from", def.ID, def.From, def.To));
                }
                return;
            }
            tran.From.RegisterTransition(tran);
            if (tran.To == null)
            {
                tran.To = GetStateById(def.To);
            }
            if (tran.To == null)
            {
                throw new StateMachineException(string.Format("Invalid TransactionDefinition {0}:{1}->{2}, no such state to", def.ID, def.From, def.To));
            }
            if (def.Actions == null)
            {
                return;
            }
            foreach (ActionDefinition actionDef in def.Actions)
            {
                CLRLogger.GetInstance().LogDevInfo(string.Format("Load action {0}", actionDef.Class));
                tran.Actions.Add(_actionBuilder.Build(actionDef));
            }
        }