Esempio n. 1
0
 public void AddRequest(int destinationFloor, ElevatorCallback servedRequestCallback)
 {
     lock (_requestQueue)
     {
         _requestQueue.Enqueue(new ElevatorRequest(destinationFloor, servedRequestCallback));
     }
     _newRequestSignaling.Set();
 }
Esempio n. 2
0
 public void SetMovingDownRequest(ElevatorCallback callback = null)
 {
     HasDownRequest           = true;
     DownRequestNotification += callback;
 }
Esempio n. 3
0
        public void AddFloorRequest(int floorNumber, FloorRequestDirection requestDirection, ElevatorCallback elevatorArrivedAtRequestFloor)
        {
            if (requestDirection == FloorRequestDirection.UP)
            {
                _floors[floorNumber].SetMovingUpRequest(elevatorArrivedAtRequestFloor);
            }
            else
            {
                _floors[floorNumber].SetMovingDownRequest(elevatorArrivedAtRequestFloor);
            }

            Elevator elevatorInRequestFloor = _elevatorPicker.GetSutableElevator(_minFloor, _maxFloor, floorNumber, requestDirection, _elevators);

            elevatorInRequestFloor.AddRequest(floorNumber, elevatorArrivedAtRequestFloor);
        }
Esempio n. 4
0
        public Elevator AddRequest(int floorNumber, FloorRequestDirection requestDirection, int destinationFloor, ElevatorCallback elvatorArrivedAtFloorCallback, ElevatorCallback servedRequestCallback)
        {
            Elevator       elevatorServedRequest   = null;
            AutoResetEvent waitforCompletionSignal = new AutoResetEvent(false);

            AddFloorRequest(floorNumber, requestDirection,
                            elevatorArrivedAtRequestFloor: (elevatorArrivedAtFloor) =>
            {
                elevatorArrivedAtFloor.AddRequest(destinationFloor: destinationFloor,
                                                  servedRequestCallback: (elevator) =>
                {
                    elevatorServedRequest = elevator;
                    Debug.WriteLine("Closing door after serving request");
                    servedRequestCallback(elevator);
                    waitforCompletionSignal.Set();
                });

                Debug.WriteLine("Closing door at arrived floor");

                elvatorArrivedAtFloorCallback(elevatorArrivedAtFloor);
            });


            waitforCompletionSignal.WaitOne();
            return(elevatorServedRequest);
        }
Esempio n. 5
0
 public ElevatorRequest(int destinationFloor, ElevatorCallback requestServed)
 {
     this.DestinationFloor = destinationFloor;
     this.DoorsOpenedAtDestinationFloor = requestServed;
 }