예제 #1
0
파일: Menu.cs 프로젝트: YungRAW/Starbucks
        public void Start()
        {
            try
            {
                isStarted = true;
                while (isStarted)
                {
                    int userInput;
                    switch (currentState)
                    {
                    case MenuStates.Initialized:
                        gui.ClearScreen();
                        menuPrinter.FirstScreen();
                        userInput    = gui.ReadInputInteger();
                        currentState = menuValidator.ValidateStateTransition(userInput, currentState, myLogger);
                        break;

                    case MenuStates.OrderingDrink:
                        gui.ClearScreen();
                        menuPrinter.SecondScreen();
                        userInput    = gui.ReadInputInteger();
                        drink        = coffeeRobot.MakeDrink(userInput);
                        currentState = menuValidator.ValidateStateTransition(userInput, currentState, myLogger, drink);
                        break;

                    case MenuStates.SelectDrinkSize:
                        gui.ClearScreen();
                        menuPrinter.ThirdScreen();
                        userInput    = gui.ReadInputInteger();
                        currentState = menuValidator.ValidateStateTransition(userInput, currentState, myLogger, drink);
                        drink.SetDrinkSize(userInput.ToDrinkSize());
                        break;

                    case MenuStates.SelectCoffeeType:
                        gui.ClearScreen();
                        menuPrinter.FourthScreen();
                        userInput    = gui.ReadInputInteger();
                        currentState = menuValidator.ValidateStateTransition(userInput, currentState, myLogger, drink);
                        (drink as ICoffeineDrink).SetCoffeeType(userInput.ToCoffeeType());
                        break;

                    case MenuStates.Finished:
                        gui.ClearScreen();
                        menuPrinter.FifthScreen();
                        gui.PrintMessageOnLine($"You ordered : {drink.GetDetails()}");
                        myLogger.Info("User ordered: " + drink.GetDetails());
                        userInput    = gui.ReadInputInteger();
                        currentState = menuValidator.ValidateStateTransition(userInput, currentState, myLogger);
                        break;

                    case MenuStates.Exit:
                        isStarted = false;
                        break;
                    }
                }
            }
            catch (MyCustomException e)
            {
                myLogger.Fatal("Could not resolve menu!");
            }
        }