예제 #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));
        }
예제 #2
0
        public override Gateway.UpdateTripStatusResponse UpdateTripStatus(Gateway.UpdateTripStatusRequest request)
        {
            Logger.BeginRequest("UpdateTripStatus sent to " + server.name, request);
            UpdateTripStatusResponse response = server.UpdateTripStatus(request);

            Logger.EndRequest(response);
            return(response);
        }
예제 #3
0
        public override Gateway.UpdateTripStatusResponse UpdateTripStatus(Gateway.UpdateTripStatusRequest request)
        {
            Logger.BeginRequest("UpdateTripStatus received from " + gateway.GetName(request.clientID), request);
            UpdateTripStatusResponse response = gateway.UpdateTripStatus(request);

            Logger.EndRequest(response);
            return(response);
        }
예제 #4
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));
        }