public void NotifyDriver(List <AvailableDriver> availableDrivers) { mAvailableDrivers = availableDrivers; if (mAvailableDrivers.Count >= 1 && mAvailableDrivers != null) { selectedDriver = mAvailableDrivers[0]; notifyDriverRef = database.GetReference("driversAvailable/" + selectedDriver.ID + "/ride_id"); notifyDriverRef.SetValue(newTrip.RideID); if (mAvailableDrivers.Count > 1) { mAvailableDrivers.RemoveAt(0); } else if (mAvailableDrivers.Count == 1) { mAvailableDrivers = null; } RequestTimer.Enabled = true; } else { //No driver accepted RequestTimer.Enabled = false; NoDriverAcceptedRequest?.Invoke(this, new EventArgs()); } }
public void NotifyDriver(List <AvailableDriver> drivers) { availableDrivers = drivers; if (availableDrivers.Count >= 1 && availableDrivers != null) { selectedDriver = availableDrivers[0]; notifyDriverRef = Database.DefaultInstance.GetRootReference().GetChild("driversAvailable/" + selectedDriver.ID + "/ride_id"); notifyDriverRef.SetValue <NSString>((NSString)newTripDetails.RideID); // Remove selected driver from the list if (availableDrivers.Count > 1) { availableDrivers.RemoveAt(0); } else if (availableDrivers.Count == 1) { availableDrivers = null; } RequestTimer.Enabled = true; } else { // No driver accepted RequestTimer.Enabled = false; NoDriverAcceptedRequest?.Invoke(this, new EventArgs()); } }
public void FindDrivers() { findDriverRef.ObserveSingleEvent(DataEventType.Value, (DataSnapshot snapshot) => { if (snapshot.GetValue <NSObject>() != null) { //Converts Datasnapshot to a dictionary to retrieve the keys; var snapShotData = snapshot.GetValue <NSDictionary>(); foreach (NSString key in snapShotData.Keys) { if (snapshot.GetChildSnapshot(key).GetChildSnapshot("ride_id").GetValue <NSObject>() != NSNull.Null) { string ride_id = snapshot.GetChildSnapshot(key).GetChildSnapshot("ride_id").GetValue <NSObject>().ToString(); if (ride_id == "waiting") { // Fetch Location Coordinates string latitudeString = snapshot.GetChildSnapshot(key).GetChildSnapshot("location").GetChildSnapshot("latitude").GetValue <NSObject>().ToString(); string longitudeString = snapshot.GetChildSnapshot(key).GetChildSnapshot("location").GetChildSnapshot("longitude").GetValue <NSObject>().ToString(); CLLocationCoordinate2D driverLocation = new CLLocationCoordinate2D(double.Parse(latitudeString), double.Parse(longitudeString)); // Compute Distance Between Pickup Location and Driver Location (KM) double distanceFromPickup = (Google.Maps.GeometryUtils.Distance(pickupLocation, driverLocation)) / 1000; if (distanceFromPickup <= 50) { // available driver AvailableDriver driver = new AvailableDriver(); driver.ID = key; driver.DistanceFromPickup = distanceFromPickup; availableDrivers.Add(driver); } } } } if (availableDrivers.Count > 0) { // Sort drivers to closest distance availableDrivers = availableDrivers.OrderBy(o => o.DistanceFromPickup).ToList(); DriversFound?.Invoke(this, new DriversFoundEventArgs { Drivers = availableDrivers }); } else { DriverNotFound.Invoke(this, new EventArgs()); } } }); }
public void OnDataChange(DataSnapshot snapshot) { if (snapshot.Value != null) { var child = snapshot.Children.ToEnumerable <DataSnapshot>(); availableDrivers.Clear(); foreach (DataSnapshot data in child) { if (data.Child("ride_id").Value != null) { if (data.Child("ride_id").Value.ToString() == "waiting") { //Get Driver Location double latitude = double.Parse(data.Child("location").Child("latitude").Value.ToString()); double longitude = double.Parse(data.Child("location").Child("longitude").Value.ToString()); LatLng driverLocation = new LatLng(latitude, longitude); AvailableDriver driver = new AvailableDriver(); //compute Distance between Pickup Location and Driver Location driver.DistanceFromPickup = SphericalUtil.ComputeDistanceBetween(mPickupLoction, driverLocation); driver.ID = data.Key; availableDrivers.Add(driver); } } } if (availableDrivers.Count > 0) { availableDrivers = availableDrivers.OrderBy(o => o.DistanceFromPickup).ToList(); DriversFound?.Invoke(this, new DriverFoundEventArgs { Drivers = availableDrivers }); } else { DriverNotFound.Invoke(this, new EventArgs()); } } else { DriverNotFound.Invoke(this, new EventArgs()); } }