public ProcessState getNext(ChangeCondition condition) { StateTransition transition = new StateTransition(CurrentState, condition); ProcessState nextState; if (!transitions.TryGetValue(transition, out nextState)) { throw new Exception("Invalid transition: " + CurrentState + " -> " + condition); } return(nextState); }
public static bool run(string command, Dictionary <string, string> options) { ICommand cmd = CommandFactory.getCommand(command); if (cmd == null) { CommandOutput.commandErrorOutput("No such command!"); return(false); } StatusMachine stateMachine = new StatusMachine(); ChangeCondition condition = stateMachine.mapToCondition(cmd); ProcessState currentState = stateMachine.MoveNext(condition); Boolean runResult, isResourceCreated; while (currentState != ProcessState.Terminated) { if (stateMachine.isRunningState(currentState) == false) { //command is not going to run, must be wrong input CommandOutput.commandErrorOutput(stateMachine.Messages[currentState]); } else { //need to run the command runResult = cmd.execute(options); if (cmd.GetType() == typeof(SetupCommand)) { isResourceCreated = Resource.isResourceCreated(); condition = stateMachine.mapToCondition(cmd, runResult, isResourceCreated); } else { condition = stateMachine.mapToCondition(cmd, runResult, false); } currentState = stateMachine.MoveNext(condition); if (currentState == ProcessState.Terminated) { break; } } while (true) { //Fetch a command if (!CommandReader.readCommand()) { return(false); } cmd = CommandFactory.getCommand(CommandReader.Command); if (cmd != null) { break; } CommandOutput.commandErrorOutput("No such command!"); } condition = stateMachine.mapToCondition(cmd); currentState = stateMachine.MoveNext(condition); } return(true); }
private void OnEnable() { changeCondition = (ChangeCondition)target; }
public StateTransition(ProcessState currentState, ChangeCondition condition) { CurrentState = currentState; Condition = condition; }
public ProcessState MoveNext(ChangeCondition condition) { CurrentState = getNext(condition); return(CurrentState); }