private void Elevator_PassingFloor(object sender, PassingFloorEventArgs e) { var elevator = (IElevator)sender; //if (e.PassingFloorNumber == 1 && e.Direction == ElevatorDirection.Down && elevator.DestinationDirection != ElevatorDirection.Stopped) //{ // elevator.Stop(); //} var pressedFloors = elevator.PressedFloors; if (pressedFloors != null && pressedFloors.Contains(e.PassingFloorNumber)) { // Stop at this floor next elevator.GoToFloor(e.PassingFloorNumber, true); } //if (e.Direction == ElevatorDirection.Up) //{ // elevator.GoingUpIndicator = true; // elevator.GoingDownIndicator = false; //} //else //{ // elevator.GoingUpIndicator = false; // elevator.GoingDownIndicator = true; //} }
/// <summary> /// Triggered slightly before the elevator will pass a floor. /// A good time to decide whether to stop at that floor. /// Note that this event is not triggered for the destination floor. /// Direction is either "up" or "down". /// </summary> /// <param name="skyscraperDto"></param> /// <returns></returns> public ContentResult PassingFloor(SkyscraperDto skyscraperDto) { var skyscraper = SyncSkyscraper(skyscraperDto); // This invokes the delegate from IPlayer ElevatorCommands elevatorCommands; try { var eventRaisedElevatorIndex = skyscraperDto.EventRaisedElevatorIndex; var passingFloorNumber = skyscraperDto.Elevators[eventRaisedElevatorIndex].PassingFloorNumber; var direction = skyscraperDto.Elevators[eventRaisedElevatorIndex].Direction; var eventArgs = new PassingFloorEventArgs { PassingFloorNumber = passingFloorNumber, Direction = direction }; skyscraper.Elevators[eventRaisedElevatorIndex].OnPassingFloor(eventArgs); elevatorCommands = CreateElevatorCommands(skyscraperDto, skyscraper); } catch (System.Exception e) { elevatorCommands = new ElevatorCommands { Message = e.Message }; } var json = JsonConvert.SerializeObject(elevatorCommands); return(Content(json, "application/json")); }
public void OnPassingFloor(PassingFloorEventArgs e) { PassingFloor?.Invoke(this, e); }