コード例 #1
1
ファイル: ElevatorState.cs プロジェクト: MisterPMG/SE
        public new void Move( Elevator Elevator )
        {
            bool breakout = false;

            while( !breakout )
            {
                if( Elevator.ReachedHighestOrLowestFloor )
                {
                    Elevator.SwitchDirection();
                }

                if( Elevator.ThereAreWishesOnThisFloor )
                {
                    breakout = true;
                }

                if( Elevator.ThereAreWishesInMyDirection )
                {
                    switch( Elevator.Direction )
                    {
                        case Defaults.Direction.Upward:
                            {
                                Elevator.CurrentFloor++;
                            } break;
                        case Defaults.Direction.Downward:
                            {
                                Elevator.CurrentFloor--;
                            } break;
                    }// switch
                }// if
            }// while

            Elevator.SetState( Defaults.State.FixedClosed );
        }
コード例 #2
0
ファイル: ElevatorState.cs プロジェクト: MisterPMG/SE
 public new void Move( Elevator Elevator )
 {
     if( Elevator.ThereAreWishesOnThisFloor )
         Elevator.SetState( Defaults.State.FixedOpen );
     else
         Elevator.SetState( Defaults.State.Moving );
 }
コード例 #3
0
ファイル: ElevatorState.cs プロジェクト: MisterPMG/SE
        public new void Move( Elevator Elevator )
        {
            bool breakOut = false;

            do
            {
                // 3 sec warten auf Button5
                Defaults.ManualResetEvent.WaitOne( 3000 );

                switch( Elevator.UI.PassengersIO )
                {
                    case Defaults.MoreOrLess.More:
                        Elevator.Passengers++; break;
                    case Defaults.MoreOrLess.Less:
                        Elevator.Passengers--; break;
                    case Defaults.MoreOrLess.Neither:
                        breakOut = true; break;
                }

                Elevator.UI.ResetPassengerIO();     // wieder Neither

            } while (!breakOut);

            if( Elevator.CheckForOverload() )
                Elevator.SetState( Defaults.State.Overload );

            if( Elevator.ReachedHighestOrLowestFloor || !Elevator.ThereAreWishesInMyDirection )
                Elevator.SwitchDirection();

            else
                Elevator.SetState( Defaults.State.FixedClosed );
        }
コード例 #4
0
ファイル: ElevatorState.cs プロジェクト: nafetz/SE
        public void Loop(Elevator elevator)
        {
            Syncronize.CloseDoor();

            if( !elevator.ReachedEndOfShaft )
            {
                if( elevator.FittingWishOnThisFloor )
                {
                    elevator.SetState( Defaults.State.FixedOpen );
                    return;
                }
                else if( !elevator.WishesInMyDirection && elevator.OppositeWishOnThisFloor )
                {
                    elevator.SetState( Defaults.State.FixedOpen );
                    return;
                }
            }
            else
            {
                elevator.SwitchDirection();

                if( elevator.OppositeWishOnThisFloor || elevator.FittingWishOnThisFloor )
                {
                    elevator.SetState(Defaults.State.FixedOpen);
                    return ;
                }
            }

            if( elevator.WishesInMyDirection )
            {
                elevator.SetState( Defaults.State.Moving );
                return;
            }

            //else if( elevator.OppositeWishOnThisFloor )
            //{
            //    elevator.SwitchDirection();
            //    elevator.SetState( Defaults.State.FixedOpen );
            //    return;
            //}

            else if( elevator.WishesInMyOppositeDirection )
            {
                elevator.SwitchDirection();
                elevator.SetState( Defaults.State.Moving );
                return;
            }

            else
            {
                elevator.TaskStatus = false;
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: nafetz/SE
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            UserInterface UI = new UserInterface();

            Elevator Elevator = new Elevator();

            Syncronize Sync = new Syncronize(ref Elevator, ref UI);

            Application.Run(UI);
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: MisterPMG/SE
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            UserInterface UI = new UserInterface();

            Application.Run(UI);

            Elevator Elevator = new Elevator(UI);

            while( true )
            {
                Elevator.CurrentState.Move( Elevator );
            }
        }
コード例 #7
0
ファイル: ElevatorState.cs プロジェクト: nafetz/SE
        public void Loop( Elevator elevator )
        {
            Syncronize.OpenDoor();
            Syncronize.ResetDoorTimer();
            Syncronize.EnablePassengerButtons(true);

            elevator.DeleteRequirementsHere();

            if (!Syncronize.SyncPassengers())
                Syncronize.ResetDoorTimer();

            if (elevator.Passengers <= 0)
                Syncronize.EnablePassengerMinusButton(false);
            else
                Syncronize.EnablePassengerMinusButton(true);

            if (elevator.CheckForOverload())
            {
                elevator.SetState(Defaults.State.Overload);
                Syncronize.StopDoorTimer();
            }
        }
コード例 #8
0
ファイル: ElevatorState.cs プロジェクト: MisterPMG/SE
 public void Move(Elevator Elevator)
 {
 }
コード例 #9
0
ファイル: ElevatorState.cs プロジェクト: MisterPMG/SE
        public new void Move( Elevator Elevator )
        {
            bool breakOut = false;

            do
            {
                // 3 sec warten auf Button
                Defaults.ManualResetEvent.WaitOne( 3000 );

                switch( Elevator.UI.PassengersIO )
                {
                    case Defaults.MoreOrLess.More:
                        Elevator.Passengers++; break;
                    case Defaults.MoreOrLess.Less:
                        Elevator.Passengers--; break;
                    case Defaults.MoreOrLess.Neither:
                        { } break;
                }

                Elevator.UI.ResetPassengerIO();     // wieder Neither

                if( !Elevator.CheckForOverload() )
                    breakOut = true;

            } while( !breakOut );

            Elevator.SetState(Defaults.State.FixedClosed);
        }
コード例 #10
0
ファイル: Syncronize.cs プロジェクト: nafetz/SE
 public Syncronize(ref Elevator Elevator, ref UserInterface UI)
 {
     _elevator = Elevator;
     _ui = UI;
     _ui.CurrentPosition = Elevator.CurrentFloor;
 }
コード例 #11
0
ファイル: ElevatorState.cs プロジェクト: nafetz/SE
 public void Loop(Elevator Elevator)
 {
     Syncronize.SyncPassengers();
     if ( !Elevator.CheckForOverload() )
         Elevator.SetState( Defaults.State.FixedOpen );
 }
コード例 #12
0
ファイル: ElevatorState.cs プロジェクト: nafetz/SE
        public void Loop(Elevator elevator)
        {
            if( elevator.ReachedEndOfShaft )
            {
                elevator.SwitchDirection();
            }

            if(elevator.FittingWishOnThisFloor)
            {
                elevator.SetState(Defaults.State.FixedClosed);
                return;
            }

            else if( elevator.WishesInMyDirection )
            {
                switch( elevator.Direction )
                {
                    case Defaults.Direction.Upward:
                        {
                            elevator.CurrentFloor++;
                            Syncronize.SyncCurrentFloor();
                        } break;
                    case Defaults.Direction.Downward:
                        {
                            elevator.CurrentFloor--;
                            Syncronize.SyncCurrentFloor();
                        } break;
                }

                Log.AddEntry("Aktuelle Etage:" + elevator.CurrentFloor.ToString());
                Syncronize.ResetMoveTimer();
                Syncronize.ShowDirection();
                return;
            }

            else if( elevator.OppositeWishOnThisFloor )
            {
                elevator.SwitchDirection();
                elevator.SetState( Defaults.State.FixedClosed );
                return;
            }
        }