public override UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r) { requests++; Gateway destPartner = GetDestinationPartner(r.clientID, r.tripID); if (destPartner != null) { Logger.AddTag("Destination partner", destPartner.name); string originClientID = r.clientID; ChangeClientIDToTripThru(r); UpdateTripStatusResponse response = destPartner.UpdateTripStatus(r); r.clientID = originClientID; if (SuccesAndTripStillActive(r, response)) { activeTrips[r.tripID].Status = r.status; if (r.status == Status.Complete) { GetTripStatusResponse resp = GetPriceAndDistanceDetailsFromClient(r); DeactivateTripAndUpdateStats(r.tripID, Status.Complete, resp.price, resp.distance); } else if (r.status == Status.Cancelled || r.status == Status.Rejected) { DeactivateTripAndUpdateStats(r.tripID, r.status); } } else { Logger.Log("Request to destination partner failed, Result=" + response.result); } return(response); } Logger.Log("Destination partner trip not found"); Logger.AddTag("ClientId", r.clientID); return(new UpdateTripStatusResponse(result: Result.NotFound)); }
public override Gateway.GetTripStatusResponse GetTripStatus(Gateway.GetTripStatusRequest request) { Logger.BeginRequest("GetTripStatus received from " + tripthru.name, request, request.tripID); Gateway.GetTripStatusResponse response = null; if (activeTrips.ContainsKey(request.tripID)) { string bookingPK = activeTrips[request.tripID].pk; TDispatchAPI.GetBookingStatusResponse getBookingStatusResponse = api.GetBookingStatus(bookingPK); TDispatchAPI.GetBookingResponse getBookingResponse = api.GetBooking(bookingPK); TDispatchAPI.Booking booking = getBookingStatusResponse.booking; booking.Merge(getBookingResponse.booking); TDispatchAPI.GetFareResponse fare = api.GetFare(new TDispatchAPI.GetFareRequest { way_points = booking.way_points, pickup_time = booking.pickup_time != null ? ((DateTime)booking.pickup_time).ToString("yyyy-MM-dd'T'HH:mm:ssK", DateTimeFormatInfo.InvariantInfo) : null, pickup_location = booking.pickup_Location.location, dropoff_location = booking.dropoff_Location.location, dropoff_time = booking.dropoff_time != null ? ((DateTime)booking.dropoff_time).ToString("yyyy-MM-dd'T'HH:mm:ssK", DateTimeFormatInfo.InvariantInfo) : null, payment_method = booking.payment_method }); response = new Gateway.GetTripStatusResponse( partnerID: ID, partnerName: name, passengerName: booking.customerName, pickupLocation: new Location((double)booking.pickup_Location.location.lat, (double)booking.pickup_Location.location.lng), dropoffLocation: new Location((double)booking.dropoff_Location.location.lat, (double)booking.dropoff_Location.location.lng), fleetID: booking.office.slug, fleetName: booking.office.name, driverID: booking.driver != null ? booking.driver.pk : null, driverName: booking.driver != null ? booking.driver.name : null, driverLocation: booking.driver != null ? new Location((double)booking.driver.location.lat, (double)booking.driver.location.lng) : null, price: booking.cost.value, distance: fare.fare.distance.km, result: Result.OK, status: this.ConvertTDispatchStatusToTripThruStatus(booking.status, booking.sub_status) ); if (booking.pk == null) { booking.pk = bookingPK; } //activeTrips[request.tripID] = booking; } else { Logger.Log("Trip " + request.tripID + " not found"); response = new GetTripStatusResponse(result: Result.NotFound); } Logger.EndRequest(response); return(response); }
public override GetTripStatusResponse GetTripStatus(GetTripStatusRequest r) { requests++; Gateway partner = GetDestinationPartner(r.clientID, r.tripID); if (partner != null) { Logger.AddTag("Destination_partner", partner.name); r.clientID = ID; GetTripStatusResponse response = partner.GetTripStatus(r); if (response.result == Result.OK) { if (TripHasNonActiveStatus(response)) { DeactivateTripAndUpdateStats(r.tripID, (Status)response.status, response.price, response.distance); } else { UpdateActiveTripWithNewTripStatus(r, response); } MakeGetTripStatusResponse(r, partner, response); } else { Logger.Log("Request to destination partner failed, Result=" + response.result); } return(response); } Logger.Log("Destination partner trip not found"); Logger.AddTag("ClientId", r.clientID); return(new GetTripStatusResponse(result: Result.NotFound)); }
private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response) { UpdateActiveTrip(new Trip { Id = r.tripID, FleetId = response.fleetID, FleetName = response.fleetName, DriverId = response.driverID, DriverName = response.driverName, Status = response.status, ETA = response.ETA, Price = response.price, Distance = response.distance, DriverRouteDuration = response.driverRouteDuration }); }
private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response) { Trip trip = new Trip { Id = r.tripID, FleetId = response.fleetID, FleetName = response.fleetName, DriverId = response.driverID, DriverName = response.driverName, Status = response.status, ETA = response.ETA, Price = response.price, DriverRouteDuration = response.driverRouteDuration, SamplingPercentage = 1 }; if (response.status == Status.PickedUp) { trip.EnrouteDistance = response.distance; } activeTrips.UpdateTrip(trip); }
private static bool TripHasNonActiveStatus(GetTripStatusResponse response) { return response.status == Status.Complete || response.status == Status.Cancelled || response.status == Status.Rejected; }
private GetTripStatusResponse GetPriceAndDistanceDetailsFromClient(UpdateTripStatusRequest r) { GetTripStatusResponse resp = partners[r.clientID].GetTripStatus(new GetTripStatusRequest(r.clientID, r.tripID)); return(resp); }
public override UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r) { requests++; Gateway destPartner = GetDestinationPartner(r.clientID, r.tripID); if (destPartner != null) { UpdateTripStatusResponse response = null; Logger.AddTag("Destination partner", destPartner.name); Logger.SetServicingId(destPartner.ID); if (ShouldForwardTripUpdate(r, destPartner)) { string originClientID = r.clientID; ChangeClientIDToTripThru(r); response = destPartner.UpdateTripStatus(r); r.clientID = originClientID; } else { response = new UpdateTripStatusResponse(result: Result.OK); } if (activeTrips.ContainsKey(r.tripID) && r.driverLocation != null) { if (activeTrips[r.tripID].DriverInitiaLocation == null) { activeTrips[r.tripID].DriverInitiaLocation = r.driverLocation; } switch (r.status) { case Status.Enroute: activeTrips[r.tripID].AddEnrouteLocationList(r.driverLocation); break; case Status.PickedUp: activeTrips[r.tripID].AddPickUpLocationList(r.driverLocation); break; } } if (SuccesAndTripStillActive(r, response)) { activeTrips[r.tripID].Status = r.status; switch (r.status) { case Status.PickedUp: { DateTime pickupTime = DateTime.UtcNow; TimeSpan lateness = pickupTime - (DateTime)activeTrips[r.tripID].Creation; activeTrips[r.tripID].PickupTime = pickupTime; activeTrips[r.tripID].Lateness = lateness; activeTrips[r.tripID].LatenessMilliseconds = lateness.TotalMilliseconds; break; } case Status.Complete: { GetTripStatusResponse resp = GetPriceAndDistanceDetailsFromClient(r); DeactivateTripAndUpdateStats(r.tripID, Status.Complete, resp.price, resp.distance); } break; case Status.Rejected: case Status.Cancelled: DeactivateTripAndUpdateStats(r.tripID, r.status); break; } } else { Logger.Log("Request to destination partner failed, Result=" + response.result); } return(response); } Logger.Log("Destination partner trip not found"); Logger.AddTag("ClientId", r.clientID); return(new UpdateTripStatusResponse(result: Result.NotFound)); }
private static bool TripHasNonActiveStatus(GetTripStatusResponse response) { return(response.status == Status.Complete || response.status == Status.Cancelled || response.status == Status.Rejected); }
private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response) { Trip trip = new Trip { Id = r.tripID, FleetId = response.fleetID, FleetName = response.fleetName, DriverId = response.driverID, DriverName = response.driverName, Status = response.status, ETA = response.ETA, Price = response.price, DriverRouteDuration = response.driverRouteDuration, SamplingPercentage = 1 }; if (response.status == Status.PickedUp) trip.EnrouteDistance = response.distance; activeTrips.UpdateTrip(trip); }
private void AddDriverInitialLocation(GetTripStatusResponse response, string tripId) { response.driverInitialLocation = activeTrips[tripId].DriverInitiaLocation; }
private void MakeGetTripStatusResponse(GetTripStatusRequest r, Gateway partner, GetTripStatusResponse response) { Logger.AddTag("Passenger", response.passengerName); Logger.AddTag("Pickup time", response.pickupTime.ToString()); Logger.AddTag("Pickup location", response.pickupLocation.ToString()); Logger.AddTag("Dropoff location", response.dropoffLocation.ToString()); Logger.AddTag("Status", response.status.ToString()); Logger.AddTag("ETA", response.ETA.ToString()); response.partnerID = partner.ID; response.partnerName = partner.name; response.originatingPartnerName = partners[originatingPartnerByTrip[r.tripID]].name; response.servicingPartnerName = partners[servicingPartnerByTrip[r.tripID]].name; Logger.AddTag("Originating partner", response.originatingPartnerName); Logger.AddTag("Servicing partner", response.servicingPartnerName); }
public override GetTripStatusResponse GetTripStatus(GetTripStatusRequest r) { requests++; if (!tripsByID.ContainsKey(r.tripID)) { Logger.Log("Trip " + r.tripID + " not found"); return new GetTripStatusResponse(result: Result.NotFound); } PartnerTrip t = tripsByID[r.tripID]; DateTime? pickupTime = null; if (t.status == Status.PickedUp || t.status == Status.DroppedOff || t.status == Status.Complete) pickupTime = t.pickupTime; // Only if trip has been pickedup. GetTripStatusResponse response; if (t.price == null && t.PartnerFleet != null) t.price = t.PartnerFleet.GetPrice(t); double? distance = null; if (t.PartnerFleet != null) distance = t.PartnerFleet.GetDistance(t); double? driverRouteDuration = null; if (t.driver != null && t.driver.route != null) driverRouteDuration = t.driver.route.duration.TotalSeconds; t.lastStatusNotifiedToPartner = t.status; response = new GetTripStatusResponse( partnerID: ID, partnerName: name, fleetID: t.PartnerFleet != null ? t.PartnerFleet.ID : null, fleetName: t.PartnerFleet != null ? t.PartnerFleet.name : null, pickupTime: pickupTime, pickupLocation: t.pickupLocation, driverID: t.driver != null ? t.driver.ID : null, driverName: t.driver != null ? t.driver.name : null, driverLocation: t.driver != null ? t.driver.location : null, dropoffTime: t.dropoffTime, dropoffLocation: t.dropoffLocation, vehicleType: t.vehicleType, ETA: t.ETA, distance: distance, driverRouteDuration: driverRouteDuration, price: t.price, status: t.status, passengerName: t.passengerName ); return response; }
public override Gateway.GetTripStatusResponse GetTripStatus(Gateway.GetTripStatusRequest request) { Logger.BeginRequest("GetTripStatus received from " + tripthru.name, request, request.tripID); Gateway.GetTripStatusResponse response = null; if (activeTrips.ContainsKey(request.tripID)) { string bookingPK = activeTrips[request.tripID].pk; TDispatchAPI.GetBookingStatusResponse getBookingStatusResponse = api.GetBookingStatus(bookingPK); TDispatchAPI.GetBookingResponse getBookingResponse = api.GetBooking(bookingPK); TDispatchAPI.Booking booking = getBookingStatusResponse.booking; booking.Merge(getBookingResponse.booking); TDispatchAPI.GetFareResponse fare = api.GetFare(new TDispatchAPI.GetFareRequest { way_points = booking.way_points, pickup_time = booking.pickup_time != null ? ((DateTime)booking.pickup_time).ToString("yyyy-MM-dd'T'HH:mm:ssK", DateTimeFormatInfo.InvariantInfo) : null, pickup_location = booking.pickup_Location.location, dropoff_location = booking.dropoff_Location.location, dropoff_time = booking.dropoff_time != null ? ((DateTime)booking.dropoff_time).ToString("yyyy-MM-dd'T'HH:mm:ssK", DateTimeFormatInfo.InvariantInfo) : null, payment_method = booking.payment_method }); response = new Gateway.GetTripStatusResponse( partnerID: ID, partnerName: name, passengerName: booking.customerName, pickupLocation: new Location((double)booking.pickup_Location.location.lat, (double)booking.pickup_Location.location.lng), dropoffLocation: new Location((double)booking.dropoff_Location.location.lat, (double)booking.dropoff_Location.location.lng), fleetID: booking.office.slug, fleetName: booking.office.name, driverID: booking.driver != null ? booking.driver.pk : null, driverName: booking.driver != null ? booking.driver.name : null, driverLocation: booking.driver != null ? new Location((double)booking.driver.location.lat, (double)booking.driver.location.lng) : null, price: booking.cost.value, distance: fare.fare.distance.km, result: Result.OK, status: this.ConvertTDispatchStatusToTripThruStatus(booking.status, booking.sub_status) ); if (booking.pk == null) booking.pk = bookingPK; //activeTrips[request.tripID] = booking; } else { Logger.Log("Trip " + request.tripID + " not found"); response = new GetTripStatusResponse(result: Result.NotFound); } Logger.EndRequest(response); return response; }