@Override public boolean handleDeparture(double now, MobsimAgent agent, Id<Link> fromLinkId) { if (!agent.getMode().equals(mode)) { return false; } MobsimPassengerAgent passenger = (MobsimPassengerAgent)agent; Id<Link> toLinkId = passenger.getDestinationLinkId(); double departureTime = now; internalInterface.registerAdditionalAgentOnLink(passenger); PassengerRequest prebookedRequest = advanceRequestStorage.retrieveAdvanceRequest(passenger, fromLinkId, toLinkId, now); if (prebookedRequest == null) {// this is an immediate request //TODO what if it was already rejected while prebooking?? createValidateAndSubmitRequest(passenger, fromLinkId, toLinkId, departureTime, now); } else { passengersByRequestId.put(prebookedRequest.getId(), passenger); PassengerPickupActivity awaitingPickup = awaitingPickupStorage.retrieveAwaitingPickup(prebookedRequest); if (awaitingPickup != null) { awaitingPickup.notifyPassengerIsReadyForDeparture(passenger, now); } } // always mark the departure as handled, even if rejected, in order to get more consistency with rejections // that are decided later (for instance, during optimisation which is usually called in the next sim step) // michalm, sep'18 // See: github.com/matsim-org/matsim/pull/362 for some more discussion return true;//!request.isRejected(); }
public void dropOffPassenger(MobsimDriverAgent driver, PassengerRequest request, double now) { MobsimPassengerAgent passenger = passengersByRequestId.remove(request.getId()); MobsimVehicle mobVehicle = driver.getVehicle(); mobVehicle.removePassenger(passenger); passenger.setVehicle(null); eventsManager.processEvent(new PersonLeavesVehicleEvent(now, passenger.getId(), mobVehicle.getId())); passenger.notifyArrivalOnLinkByNonNetworkMode(passenger.getDestinationLinkId()); passenger.endLegAndComputeNextState(now); internalInterface.arrangeNextAgentState(passenger); } }