public async Task GetCurrentLongAndLattForDriver(int Client_Id, double Client_Pickup_Long, double Client_Pickup_Latt, int Driver_Id, double Driver_Pickup_Long, double Driver_Pickup_Latt) { if (Driver_Id != 0) { //AllDriverPickUpLocationsDto DriverPickUpLocations = new AllDriverPickUpLocationsDto(); //DriverPickUpLocations.Client_Id = Client_Id; //DriverPickUpLocations.MatchedDriverVehical.Driver_Id =Driver_Id; //DriverPickUpLocations.MatchedDriverVehical.Driver_Pickup_Latt = Driver_Pickup_Latt; //DriverPickUpLocations.MatchedDriverVehical.Driver_Pickup_Long = Driver_Pickup_Long; AllMatchedDriverVehicalDto.Add(new AllDriverPickUpLocationsDto() { Client_Id = Client_Id, MatchedDriverVehical = new MatchedDriverVehicalDto() { Driver_Id = Driver_Id, Driver_Pickup_Latt = Driver_Pickup_Latt, Driver_Pickup_Long = Driver_Pickup_Long } }); //if (AllMatchedDriverVehicalDto.Count == _MatchedDriverVehicalDto.Count) //{ MatchedDriverVehicalDto nearestdriverobj = GetNearestDriver(Client_Id, Client_Pickup_Long, Client_Pickup_Latt); // Push Notification To Nearest Driver if (nearestdriverobj != null) { PushToNearestLongAndLattOfDriverForDriver(Client_Id, Driver_Id, Client_Pickup_Long, Client_Pickup_Latt); //nearestdriverobj.Driver_Id, nearestdriverobj.Driver_Pickup_Long, nearestdriverobj.Driver_Pickup_Latt); } // } } }
//// calling when driver accept or reject trip public async Task StatusTripFromDriver(int Client_Id, int Driver_Id, int TripStatusFromDriver, double Client_Pickup_Long, double Client_Pickup_Latt) { if (TripStatusFromDriver == (int)Enums.TripStatusFromDriver.Accepted) { await Clients.User(Client_Id.ToString()).SendAsync("NotifiedForClientByNearestDriver", Driver_Id); // await Clients.All.SendAsync("NotifiedForClientByNearestDriver",Driver_Id); } else // Rejected or TimerEnded { MatchedDriverVehicalDto Nextdriverobj = GetNextNearestDriver(Client_Id, Client_Pickup_Long, Client_Pickup_Latt, Driver_Id); // Push Notification To Next Driver if (Nextdriverobj != null) { PushToNearestLongAndLattOfDriverForDriver(Client_Id, Nextdriverobj.Driver_Id, Nextdriverobj.Driver_Pickup_Long, Nextdriverobj.Driver_Pickup_Latt); } } }
//To Get Nearest Pickup_Long and Trip_Pickup_Latt of Driver public MatchedDriverVehicalDto GetNearestDriver(int Client_Id, double Client_Pickup_Long, double Client_Pickup_Latt) { var coord = new GeoCoordinate(Client_Pickup_Long, Client_Pickup_Latt); var nearest = AllMatchedDriverVehicalDto.Where(x => x.Client_Id == Client_Id).Select(x => new GeoCoordinate(x.MatchedDriverVehical.Driver_Pickup_Latt, x.MatchedDriverVehical.Driver_Pickup_Long)) .OrderBy(x => x.GetDistanceTo(coord)) .FirstOrDefault(); MatchedDriverVehicalDto obj = AllMatchedDriverVehicalDto.Where(x => x.MatchedDriverVehical.Driver_Pickup_Latt == nearest.Latitude && x.MatchedDriverVehical.Driver_Pickup_Long == nearest.Longitude ).Select(x => new MatchedDriverVehicalDto { Driver_Id = x.MatchedDriverVehical.Driver_Id, Driver_Pickup_Long = x.MatchedDriverVehical.Driver_Pickup_Long, Driver_Pickup_Latt = x.MatchedDriverVehical.Driver_Pickup_Latt }).FirstOrDefault(); return(obj); }
//to Get Next Nearest Driver public MatchedDriverVehicalDto GetNextNearestDriver(int Client_Id, double Client_Pickup_Long, double Client_Pickup_Latt, int Driver_Id) { //Get all Drivers from list expect specific driver List <AllDriverPickUpLocationsDto> ListNextMatchedDriver = AllMatchedDriverVehicalDto.Where(a => a.Client_Id == Client_Id && a.MatchedDriverVehical.Driver_Id != Driver_Id).ToList(); var coord = new GeoCoordinate(Client_Pickup_Long, Client_Pickup_Latt); var nearest = ListNextMatchedDriver.Where(q => q.Client_Id == Client_Id).Select(x => new GeoCoordinate(x.MatchedDriverVehical.Driver_Pickup_Latt, x.MatchedDriverVehical.Driver_Pickup_Long)) .OrderBy(x => x.GetDistanceTo(coord)) .FirstOrDefault(); MatchedDriverVehicalDto obj = ListNextMatchedDriver.Where(x => x.MatchedDriverVehical.Driver_Pickup_Latt == nearest.Latitude && x.MatchedDriverVehical.Driver_Pickup_Long == nearest.Longitude ).Select(x => new MatchedDriverVehicalDto { Driver_Id = x.MatchedDriverVehical.Driver_Id, Driver_Pickup_Long = x.MatchedDriverVehical.Driver_Pickup_Long, Driver_Pickup_Latt = x.MatchedDriverVehical.Driver_Pickup_Latt }).FirstOrDefault(); return(obj); }