public override void Fail(LittleState.StateArgs arg) => MenuFunctions.Fail(arg);
public override void Fail(LittleState.StateArgs arg) => CalculatorFuncitons.Fail(arg);
public static void Fail(LittleState.StateArgs arg) { Console.WriteLine("Fail caused by ", arg.failException.Message); }
public override void Fail(LittleState.StateArgs arg) => DisplayFunctions.Fail(arg);
static void StateMachine() { LittleState.LittleProgram mainProgram = new Runner(); LittleState.LittleEvent lEvent = new MenuEvent(); // Program always starts with a menu. while (mainProgram.state == LittleState.mainState.Running) { // New creation to prevent NullReferenceException. LittleState.ReturnObject retObj = new LittleState.ReturnObject(); LittleState.StateArgs arg = new LittleState.StateArgs(); switch (lEvent.current) { case LittleState.EventState.Init: // Init is set as start value. After creation current is always set to Init. { // retObj is the object of the function of this state. retObj = lEvent.Init(); arg = retObj.returnArguments; switch (retObj.returnState) { case LittleState.FunctionResult.Success: { //Insert commands if the function succeded. lEvent.ChangeTo(LittleState.EventState.Idle); break; } case LittleState.FunctionResult.Fail: { //Insert commands to do if the function failed. lEvent.Fail(arg); break; } } break; } case LittleState.EventState.Idle: { retObj = lEvent.Idle(lEvent); arg = retObj.returnArguments; switch (retObj.returnState) { case LittleState.FunctionResult.Success: { //Insert commands if the function succeded. lEvent.ChangeTo(LittleState.EventState.Finish); break; } case LittleState.FunctionResult.Fail: { //Insert commands to do if the function failed. lEvent.Fail(arg); break; } } break; } case LittleState.EventState.Finish: { retObj = lEvent.Finish(); arg = retObj.returnArguments; switch (retObj.returnState) { case LittleState.FunctionResult.Success: { //Insert commands if the function succeded. lEvent.ChangeTo(LittleState.EventState.Done); break; } case LittleState.FunctionResult.Fail: { //Insert commands to do if the function failed. lEvent.Fail(arg); break; } } break; } case LittleState.EventState.Done: { retObj = lEvent.Done(); arg = retObj.returnArguments; switch (retObj.returnState) { case LittleState.FunctionResult.Success: { //Insert commands if the function succeded. break; } case LittleState.FunctionResult.Fail: { //Insert commands to do if the function failed. lEvent.Fail(arg); break; } } // Set to paused if que is empty and menu has endet. if (MainValues.eventQue.Count == 0 && lEvent.info().isRoot == true) { mainProgram.state = LittleState.mainState.Paused; } // If que is not empty execute next event. else if (MainValues.eventQue.Count > 0) { lEvent = MainValues.eventQue[0]; MainValues.eventQue.RemoveAt(0); } // If last item of the que has endet and it was not the menu, go to the menu. else if (MainValues.eventQue.Count == 0 && lEvent.info().isRoot != true) { Console.WriteLine("Letztes Item. Zurück zum Menu"); lEvent = new MenuEvent(); } break; } } switch (mainProgram.state) { case LittleState.mainState.Done: { mainProgram.Done(); break; } case LittleState.mainState.Fail: { mainProgram.Fail(); break; } case LittleState.mainState.Paused: { LittleState.ReturnObject retObjPrg = mainProgram.Paused(); if (retObjPrg.shallContinueProgram) { mainProgram.state = LittleState.mainState.Running; lEvent.current = LittleState.EventState.Init; } break; } } } Console.ReadKey(); }