public virtual void ExecDoEntry(StateEntryEventArgs seea) { StateMachine sm = seea.Sender; if (sm.FlageNormalStatus) { sm.ChangeState(this); DoEntry(seea); } }
protected void DoEntry(StateEntryEventArgs seea) { if (OnEntry == null) { return; } //if (OnEntry.GetInvocationList().Count() > 1) throw new ArgumentException("不應有2個以上的OnEntry"); this.OnEntry(this, seea); //foreach (var invo in OnEntry.GetInvocationList()) //{ // var loopSeea = new StateEntryEventArgs(seea.sm); // invo.DynamicInvoke(this, loopSeea); //} }
//override do entry function public override void ExecDoEntry(StateEntryEventArgs senea) { StateMachine sm = senea.Sender; sm.ChangeState(this); //sm.SmSnapShot();TODO: 要不要Snap應由專案決定, 不由Library決定 DoEntry(senea); if (ReasonOfState.StateAlarmId != null) { sm.PopupAlarm(sm, EnumStateMachineMsgType.StateMachineException, ReasonOfState.StateAlarmId.ToString()); } else { throw new StateMachineException("AlarmId is fail string"); } }
public virtual bool RunTrigger(IStateParam param, StateMachine sm) { //if (!sm.CheckState(FromState)) //{ // throw new NotCurrentStateException(sm.GetType().ToString() + " : current is " + sm.CurrentState.StateName + ",not Transition from: " + FromState.StateName); //} StateExitEventArgs seea = new StateExitEventArgs(); try { FromState.DoExit(seea); } catch (Exception ex) { throw ex; } try { runAct.Invoke(sm, null); } catch (Exception ex) { throw ex; } StateEntryEventArgs senea = new StateEntryEventArgs(sm); try { ToState.ExecDoEntry(senea); } catch (Exception ex) { throw ex; } return(true); }
public override bool RunTrigger(IStateParam param, StateMachine sm) { try { StateExitEventArgs seea = new StateExitEventArgs(); FromState.DoExit(seea); } catch { throw new StateMachineFatelException(FromState.StateName + ": get exit fail event"); } runAct.Invoke(sm, null); try { StateEntryEventArgs seea = new StateEntryEventArgs(sm); ToState.ExecDoEntry(seea); } catch { throw new StateMachineFatelException(ToState.StateName + ": get entry fail event"); } return(true); }