Exemple #1
0
        public static object process(object[] args)
        {
            FiniteStateMachineVariables variables = new FiniteStateMachineVariables(args);
            IState state = new StartState();
            List<IState> statesStack = new List<IState>();

            while (true)
            {
                statesStack.Add(state);

                if (state is INormalState)
                {
                    state = ((INormalState)state).execute(variables);
                }
                else if (state is IFinishState)
                {
                    return ((IFinishState)state).getResult(variables);
                }
                else if (state is IErrorState)
                {
                    throw new FiniteStateMachineException(((IErrorState)state).getErrorMessage(variables));
                }
                else
                {
                    throw new Exception(string.Format("Unknown kind of state '{0}'", state.GetType().Name));
                }
            }
        }
Exemple #2
0
 public object getResult(FiniteStateMachineVariables variables)
 {
     if (variables.result is int && ((int)variables.result) % 2 == 0)
     {
         return string.Format("{0} :-)", variables.result);
     }
     else
     {
         return variables.result;
     }
 }
Exemple #3
0
 public string getErrorMessage(FiniteStateMachineVariables variables)
 {
     return "Shit happened - " + variables.defaultErrorMessage + " - be happy!";
 }
Exemple #4
0
        public IState execute(FiniteStateMachineVariables variables)
        {
            variables.result = new Random().Next();

            return new FinishStateDefault();
        }
Exemple #5
0
        public IState execute(FiniteStateMachineVariables variables)
        {
            variables.defaultErrorMessage = "Error message " + new Random().Next();

            return new BlaBlaError();
        }
Exemple #6
0
 public IState execute(FiniteStateMachineVariables variables)
 {
     if (new Random().NextDouble() > 0.5)
     {
         return new State2();
     }
     else
     {
         return new State3();
     }
 }