示例#1
0
        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;
            //}
        }
示例#2
0
        /// <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"));
        }
示例#3
0
 public void OnPassingFloor(PassingFloorEventArgs e)
 {
     PassingFloor?.Invoke(this, e);
 }