public MicrowaveStateEnum GetNextState(MicrowaveStateEnum currentState, bool startPressed) { switch (currentState) { case MicrowaveStateEnum.CLOSED: if (_hardware.DoorOpen) { return(MicrowaveStateEnum.OPENED); } if (startPressed == true) { return(MicrowaveStateEnum.HEATING); } return(MicrowaveStateEnum.CLOSED); case MicrowaveStateEnum.OPENED: if (!_hardware.DoorOpen) { return(MicrowaveStateEnum.CLOSED); } return(MicrowaveStateEnum.OPENED); case MicrowaveStateEnum.HEATING: if (_hardware.DoorOpen) { return(MicrowaveStateEnum.OPENED); } if (!_timer.IsRunning) { return(MicrowaveStateEnum.CLOSED); } return(MicrowaveStateEnum.HEATING); } throw new UnhandledStateException("Unexpected state: " + currentState); }
public MicrowaveController(IMicrowaveOvenHW hardware, ITimer timer, MicrowaveStateEnum initialState = MicrowaveStateEnum.CLOSED) { if (hardware == null || timer == null) { throw new Exception("Provide hardware and timer"); } _hardware = hardware; _hardware.StartButtonPressed += StartButtonPressed; _hardware.DoorOpenChanged += DoorOpenedChanged; _timer = timer; _timer.Finished += TimerStopped; MicrowaveState = initialState; }