コード例 #1
0
 public void MoveTo(LightSwitchState nextState)
 {
     if (nextState.GetType() != _currentState.GetType()) //TODO explain this!
     {
         _currentState = nextState;
         _currentState.OnEnter(this); //what about OnExit()?
     }
 }
コード例 #2
0
 public LightSwitchStateMachine(
     LightSwitchState initialState,
     int numSwitches,
     Func <object> powerUpLight,
     Func <object> powerDownLight)
 {
     CurrentState   = initialState;
     NumSwitches    = numSwitches;
     PowerUpLight   = powerUpLight;
     PowerDownLight = powerDownLight;
 }
コード例 #3
0
ファイル: Program.cs プロジェクト: dotnet31102018/26.05.2019
        static void Main(string[] args)
        {
            LightSwitchState state = LightSwitchState.ON;

            Console.WriteLine((int)state);

            Enum.GetNames(typeof(LightSwitchState)).ToList().ForEach(s => Console.WriteLine(s));

            LightSwitchState[] arr = (LightSwitchState[] )Enum.GetValues(typeof(LightSwitchState));

            Enum.TryParse("OFF", out LightSwitchState result);
            Console.WriteLine(result);
        }
コード例 #4
0
        /// <summary>
        /// This method retrieves the transition array for a light switch for the given target state,
        /// i.e. to reach a target state of 'On' first a 'SwitchingOn' state must be processed,
        /// so it will be included in the array earlier than the target state.
        /// </summary>
        /// <param name="state"></param>
        /// <returns></returns>
        private LightSwitchState[] GetLightSwitchTransition(LightSwitchState state)
        {
            switch (state)
            {
            case LightSwitchState.On:
                return(new[] { LightSwitchState.SwitchingOn, LightSwitchState.On });

            case LightSwitchState.Off:
                return(new[] { LightSwitchState.SwitchingOff, LightSwitchState.Off });
            }

            throw new InvalidEnumArgumentException(nameof(state), (int)state, typeof(LightSwitchState));
        }
コード例 #5
0
        public bool SendLightsState(IEnumerable <int> lightIds, LightSwitchState state)
        {
            var lightIdsMessage = new StringBuilder();

            foreach (var id in lightIds ?? Enumerable.Empty <int>())
            {
                lightIdsMessage.Append($"{id} ");
            }

            var message = $"{(int) state}, {lightIdsMessage.ToString().TrimEnd()}";

            return(SendMessage(message));
        }
コード例 #6
0
        public void ChangeState()
        {
            if (State != LightSwitchState.BROKEN)
            {
                //if (State == "On")
                //{
                //    State = "Off";
                //}
                //else
                //{
                //    State = "On";
                //}

                State = State == LightSwitchState.BROKEN ? LightSwitchState.BROKEN : State == LightSwitchState.OFF ?
                        LightSwitchState.ON : LightSwitchState.OFF;
            }
        }
コード例 #7
0
 private static SynchronizedLightSwitch CreateLightSwitchStateMachine(
     LightSwitchState lightSwitchState)
 {
     return(new SynchronizedLightSwitch(new LightSwitchStateMachine(
                                            lightSwitchState)));
 }
コード例 #8
0
 public void ElectricShock()
 {
     State = LightSwitchState.BROKEN;
 }
コード例 #9
0
 public LightSwitch()
 {
     this.State = LightSwitchState.OFF;
 }
コード例 #10
0
 public LightSwitchStateMachine(LightSwitchState initialState)
 {
     _currentState = initialState;
     _currentState.OnEnter(this); //has to be the last line!!! Alternative - Start() method
 }
コード例 #11
0
 public void MoveTo(LightSwitchState nextState)
 {
     _currentState = nextState;
     _currentState.OnEnter(); //what about OnExit()?
 }
        //etc. etc.

        private static void AssertMachineIsIn(LightSwitchState nextState, LightSwitchContext machine)
        {
            nextState.Received(1).SwitchOn(machine);
        }
コード例 #13
0
 public LightSwitchStateMachine(LightSwitchState initialState)
 {
     MoveTo(initialState); //has to be the last line!!! Alternative - Start() method
 }