コード例 #1
0
        public override Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus)
        {
            Log.LogMessage(string.Format($"TRY TO FIND TOLLPOINT ENTRANCES FROM {SettingsService.WaypointLargeRadius * 1000} m"));

            if (tollGeoStatus?.TollPointWithDistance == null)
            {
#if REALEASE
                GeoWatcher.StopUpdatingHighAccuracyLocation();
#endif
                Log.LogMessage($"No waypoint founded for location {GeoWatcher.Location}");
                return(Task.FromResult(new TollGeoStatusResult()
                {
                    TollGeolocationStatus = TollGeolocationStatus.NotOnTollRoad
                }));
            }
            else
            {
                foreach (var item in WaypointChecker.TollPointsInRadius)
                {
                    Log.LogMessage($"FOUNDED WAYPOINT : {item.Name}, DISTANCE {item.Distance}");
                }
#if REALEASE
                GeoWatcher.StartUpdatingHighAccuracyLocation();
#endif
                return(Task.FromResult(new TollGeoStatusResult()
                {
                    TollGeolocationStatus = TollGeolocationStatus.NearTollRoadEntrance,
                    IsNeedToDoubleCheck = false
                }));
            }
        }
コード例 #2
0
        public async override Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus)
        {
            var getPointWithResult = await CheckNearestPoint(tollGeoStatus.TollGeolocationStatus);

            var resultAfterChecking = getPointWithResult.IsNeedToDoubleCheck
                                                        ? await StatusesFactory.GetStatus(getPointWithResult.TollGeolocationStatus).CheckStatus(getPointWithResult)
                                                        : getPointWithResult;

            return(resultAfterChecking);
        }
コード例 #3
0
        public override Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus)
        {
            Log.LogMessage(string.Format($"TRY TO FIND TOLLPOINT EXITS FROM {SettingsService.WaypointLargeRadius * 1000} m"));

            WaypointChecker.SetIgnoredChoiceTollPoint(null);

            if (tollGeoStatus?.TollPointWithDistance == null)
            {
#if REALEASE
                GeoWatcher.StopUpdatingHighAccuracyLocation();
#endif
                Log.LogMessage($"No waypoint founded for location {GeoWatcher.Location}");
                return(Task.FromResult(new TollGeoStatusResult()
                {
                    TollGeolocationStatus = TollGeolocationStatus.OnTollRoad,
                    IsNeedToDoubleCheck = true
                }));
            }
            return(null);
        }
コード例 #4
0
 public abstract Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus);
コード例 #5
0
        public async override Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus)
        {
            if (tollGeoStatus?.TollPointWithDistance == null)
            {
                return new TollGeoStatusResult()
                       {
                           TollGeolocationStatus = TollGeolocationStatus.NotOnTollRoad
                       }
            }
            ;

            var insideTollPoint = WaypointChecker.DetectWeAreInsideSomeTollPoint(tollGeoStatus.Location);

            if (insideTollPoint != null)
            {
                double radius = insideTollPoint.Radius != 0 ? insideTollPoint.Radius / 1000 : SettingsService.WaypointSmallRadius * 1000;

                Log.LogMessage($"We are inside tollpoint {radius} radius");

                WaypointChecker.SetIgnoredChoiceTollPoint(insideTollPoint);

#if REALEASE
                if (WaypointChecker.TollPointsInRadius.Count == 1)
                {
                    GeoWatcher.StopUpdatingHighAccuracyLocation();
                }
#endif

                if (await SpeechToTextService.AskQuestionAsync($"Are you entering {insideTollPoint.Name} tollroad?"))
                {
                    WaypointChecker.SetEntrance(insideTollPoint);

                    if (insideTollPoint.WaypointAction == WaypointAction.Bridge)
                    {
                        WaypointChecker.SetExit(insideTollPoint);
                        SaveTripProgress();
                        WaypointChecker.SetTollPointsInRadius(null);
                        await NotifyService.NotifyAsync("Bill was created");

                        WaypointChecker.ClearData();
                        return(new TollGeoStatusResult()
                        {
                            TollGeolocationStatus = Mvx.Resolve <IStoredSettingsService>().CurrentRoadStatus == TollGeolocationStatus.OnTollRoad
                                                       ? Mvx.Resolve <IStoredSettingsService>().CurrentRoadStatus
                                                       : TollGeolocationStatus.NotOnTollRoad
                        });
                    }
                    else
                    {
                        Mvx.Resolve <IStoredSettingsService>().CurrentRoadStatus = TollGeolocationStatus.OnTollRoad;
                        return(new TollGeoStatusResult()
                        {
                            TollGeolocationStatus = TollGeolocationStatus.OnTollRoad
                        });
                    }
                }
                else
                {
                    return(new TollGeoStatusResult()
                    {
                        TollGeolocationStatus = TollGeolocationStatus.NotOnTollRoad
                    });
                }
            }
            else
            {
                return(new TollGeoStatusResult()
                {
                    TollGeolocationStatus = TollGeolocationStatus.NearTollRoadEntrance
                });
            }
        }
コード例 #6
0
        public override async Task <TollGeoStatusResult> CheckStatus(TollGeoStatusResult tollGeoStatus)
        {
            if (tollGeoStatus?.TollPointWithDistance == null)
            {
                return new TollGeoStatusResult()
                       {
                           TollGeolocationStatus = TollGeolocationStatus.OnTollRoad
                       }
            }
            ;

            var insideTollPoint = WaypointChecker.DetectWeAreInsideSomeTollPoint(tollGeoStatus.Location);

            if (insideTollPoint != null)
            {
                double radius = insideTollPoint.Radius != 0 ? insideTollPoint.Radius / 1000 : SettingsService.WaypointSmallRadius * 1000;

                Log.LogMessage($"We are inside tollpoint {radius} radius");

                WaypointChecker.SetIgnoredChoiceTollPoint(insideTollPoint);

#if REALEASE
                if (WaypointChecker.TollPointsInRadius.Count == 1)
                {
                    GeoWatcher.StopUpdatingHighAccuracyLocation();
                }
#endif

                if (await SpeechToTextService.AskQuestionAsync($"Are you exiting from {insideTollPoint.Name} tollroad?"))
                {
                    WaypointChecker.SetExit(insideTollPoint);
                    SaveTripProgress();
                    WaypointChecker.SetTollPointsInRadius(null);
                    WaypointChecker.SetIgnoredChoiceTollPoint(null);

                    if (WaypointChecker.Exit != null)
                    {
                        await NotifyService.NotifyAsync("Bill was created");

                        var duration = WaypointChecker.TripDuration;

                        if (duration.Hours > 0)
                        {
                            await NotifyService.NotifyAsync($"Trip duration is {duration.Hours} hours {duration.Minutes} minutes {duration.Seconds} seconds");
                        }
                        else
                        {
                            await NotifyService.NotifyAsync($"Trip duration is {duration.Minutes} minutes {duration.Seconds} seconds");
                        }

                        Mvx.Resolve <IStoredSettingsService>().CurrentRoadStatus = TollGeolocationStatus.NotOnTollRoad;
                        WaypointChecker.ClearData();
                    }
                    else
                    {
                        await NotifyService.NotifyAsync("Bill was not created. You didn't enter any exit");
                    }

                    return(new TollGeoStatusResult()
                    {
                        TollGeolocationStatus = TollGeolocationStatus.NotOnTollRoad
                    });
                }
                else
                {
                    return(new TollGeoStatusResult()
                    {
                        TollGeolocationStatus = TollGeolocationStatus.OnTollRoad
                    });
                }
            }
            else
            {
                return(new TollGeoStatusResult()
                {
                    TollGeolocationStatus = TollGeolocationStatus.NearTollRoadExit
                });
            }
        }