private void TryEnterElevator(Elevator elevator, Passenger passenger) { lock (locker) { if (!elevator.CanUseElevator(passenger.Weight)) { Console.WriteLine("Elevator " + elevator.elevatorIndex + " is full for passenger " + passenger.passengerIndex, elevator.elevatorIndex); logger.Write( "Elevator " + elevator.elevatorIndex + " is full for passenger " + passenger.passengerIndex, elevator.elevatorIndex); GlobalEvents.OnPassengerCalledElevator(new PassengerEventArgs(passenger)); return; } elevator.EnterInElevator(passenger); if (wasCalled) { RemoveDestinationFloorIndexesConcurrentBag(elevator, passenger.CurrentFloorIndex); wasCalled = false; } AddDestinationFloorIndexesConcurrentBag(elevator, passenger.DestinationFloorIndex); logger.Write("Passenger " + passenger.passengerIndex + " entered elevator" + elevator.elevatorIndex, elevator.elevatorIndex); Console.WriteLine("Passengers inside in elevator {0}: {1}, total weight: {2}", elevator.elevatorIndex, elevator.GetPeopleInside().Count, elevator.WeightInside); UpdateElevatorDirection(elevator); GlobalEvents.OnPassengerEnteredElevator(new PassengerEventArgs(passenger)); } }