Beispiel #1
0
 public Elevator(IElevatorController elevatorControllerConnection, int elevatorID)
 {
     ID = elevatorID;
     CurFloor = 1;
     CurState = State.Idle;
     EPB = new ElevatorButtonPanel(elevatorID, elevatorControllerConnection);
 }
Beispiel #2
0
        /// <summary>
        /// Find the nearest downward moving elevator for the requested floor number
        /// </summary>
        /// <param name="floorNumber"></param>
        /// <returns></returns>
        private IElevatorController GetClosestDownwardElevator(int floorNumber)
        {
            var downgoingElevators =
                _elevators.Where(
                    x =>
                    (x.Status == ElevatorStatus.InFlight && x.Direction == Direction.Downward &&
                     x.CurrentFloorNumber > floorNumber) ||
                    (x.Status == ElevatorStatus.WaitingForInput && x.CurrentFloorNumber > floorNumber)
                    );

            IElevatorController downwardElevator = null;

            foreach (var e in downgoingElevators)
            {
                if (e.CurrentFloorNumber > floorNumber)
                {
                    if ((downwardElevator != null && downwardElevator.CurrentFloorNumber > e.CurrentFloorNumber) ||
                        downwardElevator == null)
                    {
                        downwardElevator = e;
                    }
                }
            }
            return(downwardElevator);
        }
Beispiel #3
0
        /// <summary>
        /// Find the nearest upward moving elevator for the requested floor number
        /// </summary>
        /// <param name="floorNumber"></param>
        /// <returns></returns>
        private IElevatorController GetClosestUpwardElevator(int floorNumber)
        {
            var upwardElevators =
                _elevators.Where(
                    x =>
                    (x.Status == ElevatorStatus.InFlight && x.Direction == Direction.Upward &&
                     x.CurrentFloorNumber < floorNumber) ||
                    (x.Status == ElevatorStatus.WaitingForInput && x.CurrentFloorNumber > floorNumber)
                    );

            IElevatorController upwardElevator = null;

            foreach (var e in upwardElevators)
            {
                if (e.CurrentFloorNumber < floorNumber)
                {
                    if ((upwardElevator != null && upwardElevator.CurrentFloorNumber < e.CurrentFloorNumber) ||
                        upwardElevator == null)
                    {
                        upwardElevator = e;
                    }
                }
            }
            return(upwardElevator);
        }
 public ButtonPanel BuildButtonPanel(ElevatorDirection direction, IButtonCreator buttonCreator, IElevatorController elevatorController, IReservationSystem reservationSystem)
 {
     var newButtonPanel = new ButtonPanel
     {
         Direction = direction
     };
     newButtonPanel.CreateButtons(buttonCreator, elevatorController.Floors);
     newButtonPanel.SetButtonEvents(reservationSystem, elevatorController);
     return newButtonPanel;
 }
        public void SetButtonEvents(IReservationSystem reservations, IElevatorController elevatorController)
        {
            for (int i = 0; i < _buttonList.Count; i++)
            {
                int closedI = i;
                Button b = _buttonList[i];
                b.Click += (sender, args) => reservations.PlaceReservation(closedI, Direction);

                IReservation reservation = new Reservation { Direction = Direction, FloorIndex = closedI };
                b.Click += (sender, args) => elevatorController.HandleButtonPressed(this, new ItemEventArgs<IReservation>(reservation));
            }

            reservations.ReservationPlaced += HandleReservationPlaced;
            reservations.ReservationRemoved += HandleReservationRemoved;
        }
Beispiel #6
0
        private static void TakeInput(IElevatorController liftController)
        {
            while (true)
            {
                if (Console.ReadKey().Key == ConsoleKey.S)
                {
                    var direction = Direction.Up;
                    if (_random.Next(0, 100) > 50)
                    {
                        direction = Direction.Down;
                    }
                    liftController.SummonButtonPushed(_random.Next(0, _floorCount), direction);
                }

                if (Console.ReadKey().Key == ConsoleKey.F)
                {
                    liftController.FloorButtonPushed(_random.Next(0, _floorCount));
                }
            }
        }
Beispiel #7
0
 public FloorButtonPanel(IElevatorController elevatorControllerConnection, int floor)
 {
     Floor = floor;
     _ecc = elevatorControllerConnection;
 }
Beispiel #8
0
 public Elevator(int topFloorNumber, int bottomFloorNumber, IElevatorController elevatorController)
 {
     _topFloorNumber    = topFloorNumber;
     _bottomFloorNumber = bottomFloorNumber;
     ElevatorController = elevatorController;
 }
 public ElevatorButtonPanel(int id, IElevatorController elevatorControllerConection)
 {
     _ecc = elevatorControllerConection;
     _id = id;
 }