Example #1
0
        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 UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r)
        {
            // Note: GetTrip populates the foreignTripID
            requests++;
            if (!tripsByID.ContainsKey(r.tripID))
                return new UpdateTripStatusResponse(result: Result.NotFound);
            PartnerTrip t = tripsByID[r.tripID];
            UpdateTripStatusResponse response = new UpdateTripStatusResponse();
            t.UpdateTripStatus(notifyPartner: false, status: r.status, driverLocation: r.driverLocation, eta: r.eta);

            return response;
        }
Example #3
0
 public virtual UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest request)
 {
     throw new Exception("Not supported");
 }
Example #4
0
 virtual public UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest request)
 {
     throw new Exception("Not supported");
 }
 private bool SuccesAndTripStillActive(UpdateTripStatusRequest r, UpdateTripStatusResponse response)
 {
     return response.result == Result.OK && activeTrips.ContainsKey(r.tripID);
 }
 private GetTripStatusResponse GetPriceAndDistanceDetailsFromClient(UpdateTripStatusRequest r)
 {
     GetTripStatusResponse resp = partners[r.clientID].GetTripStatus(new GetTripStatusRequest(r.clientID, r.tripID));
     return resp;
 }
 private void ChangeClientIDToTripThru(UpdateTripStatusRequest r)
 {
     r.clientID = ID;
 }
 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);
 }
Example #9
0
 public override UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r)
 {
     // Note: GetTrip populates the foreignTripID
     UpdateTripStatusResponse response;
     {
         requests++;
         if (!tripsByID.ContainsKey(r.tripID))
         {
             response = new UpdateTripStatusResponse(result: Result.NotFound);
         }
         else
         {
             PartnerTrip t = tripsByID[r.tripID];
             //lock (t)
             //{
                 response = new UpdateTripStatusResponse();
                 t.UpdateTripStatus(notifyPartner: false, status: r.status, driverLocation: r.driverLocation, eta: r.eta);
             //}
             Logger.SetServicingId(this.ID);
         }
     }
     return response;
 }
Example #10
0
 private void ChangeClientIDToTripThru(UpdateTripStatusRequest r)
 {
     r.clientID = ID;
 }
Example #11
0
        private GetTripStatusResponse GetPriceAndDistanceDetailsFromClient(UpdateTripStatusRequest r)
        {
            GetTripStatusResponse resp = partners[r.clientID].GetTripStatus(new GetTripStatusRequest(r.clientID, r.tripID));

            return(resp);
        }
Example #12
0
 private bool SuccesAndTripStillActive(UpdateTripStatusRequest r, UpdateTripStatusResponse response)
 {
     return(response.result == Result.OK && activeTrips.ContainsKey(r.tripID));
 }
Example #13
0
 private bool ShouldForwardTripUpdate(UpdateTripStatusRequest r, Gateway destinationPartner)
 {
     return(r.clientID != destinationPartner.ID);
 }
Example #14
0
        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));
        }
Example #15
0
 private bool ShouldForwardTripUpdate(UpdateTripStatusRequest r, Gateway destinationPartner)
 {
     return r.clientID != destinationPartner.ID;
 }
Example #16
0
        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);
        }