public void AddRequest(int destinationFloor, ElevatorCallback servedRequestCallback) { lock (_requestQueue) { _requestQueue.Enqueue(new ElevatorRequest(destinationFloor, servedRequestCallback)); } _newRequestSignaling.Set(); }
public void SetMovingDownRequest(ElevatorCallback callback = null) { HasDownRequest = true; DownRequestNotification += callback; }
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); }
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); }
public ElevatorRequest(int destinationFloor, ElevatorCallback requestServed) { this.DestinationFloor = destinationFloor; this.DoorsOpenedAtDestinationFloor = requestServed; }