Esempio n. 1
0
 public void AssignJobs(IEnumerable <PassengerRequest> passengerRequests)
 {
     foreach (var item in passengerRequests)
     {
         PassengerRequests.Enqueue(item);
     }
 }
Esempio n. 2
0
            public void Handle(Message msg)
            {
                // receive message with PID: passenger ID
                // and value if passenger is missionary
                if (CONDITION_AddPassengerToBoat)
                {
                    PassengersInBoat.Add(msg);
                }
                else
                {
                    PassengerRequests.Add(msg);
                }

                // we collect passenger requests and put them into boat if there is room
            }
Esempio n. 3
0
        private bool ProcessPassengers()
        {
            // after 4 seconds, check if CONDITION_CrossRiver
            if (CONDITION_CrossRiver)
            {
                List <String> temp = new List <string>();
                foreach (var p in PassengersInBoat)
                {
                    temp.Add(pre + p.PID);
                }

                var tempBus = new BusBuilder()
                              .WithLogging(new ConsoleLogger())
                              .DefineErrorQueue("Boat.errors")
                              .DefineWriteQueues(temp.ToArray())
                              .CreateLocalQueuesAutomatically()
                              .JsonSerialization()
                              .CreateBus();


                // send it to all passengers in boat that crossed the river (:
                tempBus.Send(true);

                PassengersInBoat.Clear();
                // transfer passengers from waiting list to boat
                var removeList = new List <int>();
                foreach (var pr in PassengerRequests)
                {
                    if (CONDITION_AddPassengerToBoat)
                    {
                        PassengersInBoat.Add(pr);
                        removeList.Add(pr.PID);
                    }
                }
                PassengerRequests.RemoveAll(r => removeList.Any(a => a == r.PID));

                return(true); // keep going
            }

            // die
            return(false);
        }
Esempio n. 4
0
 private void ElevatorThread()
 {
     lock (locker)
     {
         if (PassengerRequests != null && PassengerRequests.Count > 0)
         {
             PassengerRequest request;
             PassengerRequests.TryPeek(out request);
             if (request != null)
             {
                 //coming down to pick a person and go up
                 if (CurrentElevatorStatus == ElevatorStatus.Idle &&
                     request.PassengerRequestDirection == Direction.Up &&
                     CurrentFloor > request.SourceFloorIndex &&
                     UpQueue.Count == 0)
                 {
                     DownQueue.Add(request.SourceFloorIndex);
                     DownQueue.Add(request.TargetFloorIndex);
                     CurrentElevatorStatus = ElevatorStatus.Moving;
                     ElevatorDirection     = Direction.Up;
                     Console.WriteLine($"Elevator# {ElevatorNumber} is moving down from {CurrentFloor}-->{request.SourceFloorIndex} to serve (up)_request,{request.SourceFloorIndex}-->{request.TargetFloorIndex}");
                 }
                 //coming up to pick a person and go down
                 else if (CurrentElevatorStatus == ElevatorStatus.Idle &&
                          request.PassengerRequestDirection == Direction.Down &&
                          CurrentFloor < request.SourceFloorIndex &&
                          DownQueue.Count == 0)
                 {
                     UpQueue.Add(request.SourceFloorIndex);
                     UpQueue.Add(request.TargetFloorIndex);
                     CurrentElevatorStatus = ElevatorStatus.Moving;
                     ElevatorDirection     = Direction.Down;
                     Console.WriteLine($"Elevator# {ElevatorNumber} is moving up from {CurrentFloor}-->{request.SourceFloorIndex} to serve (down)_request,{request.SourceFloorIndex}-->{request.TargetFloorIndex}");
                 }
                 else if (request.PassengerRequestDirection == Direction.Up &&
                          CurrentFloor <= request.SourceFloorIndex &&
                          DownQueue.Count == 0)
                 {
                     UpQueue.Add(request.SourceFloorIndex);
                     UpQueue.Add(request.TargetFloorIndex);
                     ElevatorDirection     = Direction.Up;
                     CurrentElevatorStatus = ElevatorStatus.Moving;
                     PassengerRequests.TryDequeue(out request);
                     Console.WriteLine($"Elevator# {ElevatorNumber} received a request_details(UP) " +
                                       $":{request.SourceFloorIndex}-->{request.TargetFloorIndex}");
                 }
                 else if (request.PassengerRequestDirection == Direction.Down &&
                          CurrentFloor >= request.SourceFloorIndex &&
                          UpQueue.Count == 0)
                 {
                     DownQueue.Add(request.SourceFloorIndex);
                     DownQueue.Add(request.TargetFloorIndex);
                     ElevatorDirection     = Direction.Down;
                     CurrentElevatorStatus = ElevatorStatus.Moving;
                     PassengerRequests.TryDequeue(out request);
                     Console.WriteLine($"Elevator# {ElevatorNumber} received a request_details(DOWN) :{request.SourceFloorIndex}-->{request.TargetFloorIndex}");
                 }
             }
         }
     }
 }
Esempio n. 5
0
 public void AssignJob(PassengerRequest passengerRequest)
 {
     PassengerRequests.Enqueue(passengerRequest);
 }