protected void AddRouteMatch(RouteOption option, Func <bool> qualifier, Func <string> matchTo)
        {
            AddComparison(qualifier, () =>
            {
                var optionVal = httpContextAccessor.HttpContext.GetRouteValue(option.ToString().ToLower()) as string;

                // Supporting multiple values, split by ;
                var matchVals = matchTo()
                                .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                // Sanitise for Razor Page
                if (option == RouteOption.Page)
                {
                    for (int i = 0; i < matchVals.Length; i++)
                    {
                        if (matchVals[i][0] != '/')
                        {
                            matchVals[i] = "/" + matchVals[i];
                        }
                    }
                }

                return(matchVals.Any(m => string.Equals(optionVal, m, StringComparison.InvariantCultureIgnoreCase)));
            });
        }
        /// <summary>
        /// Calculate the Best Route
        /// </summary>
        /// <param name="mapPosition"></param>
        private void CalculateBestRoute(MapPosition mapPosition)
        {
            //Add value to Route
            RouteOption.Add(mapPosition.Value);

            //Load closer values
            MapPositionAroundValues mapPositionAroundValues = this.GetAroundValues(mapPosition);

            //Calculate next position
            MapPosition nextPosition = this.CalculateNextPosition(mapPositionAroundValues);

            //Validate next position
            if (nextPosition.Value > 0)
            {
                CalculateBestRoute(nextPosition);
            }
            else
            {
                RouteOptionList.Add(RouteOption);

                CompareRoutes();

                PrintBestRoute();
            }
        }
Exemplo n.º 3
0
 public override void Visit(RouteOption node) { this.action(node); }
 public override void ExplicitVisit(RouteOption fragment)
 {
     _fragments.Add(fragment);
 }
 public abstract State getNewState(State state, RouteOption routeOption);
 public abstract MapPosition getNewPosition(MapPosition position, State state, RouteOption routeOption);
Exemplo n.º 7
0
        public static async Task <RouteOption> LoadTableOptionsAsync(string typeName, ILocalStorageService localStorage)
        {
            var objectsTask = default(Task <RouteOption>);

            lock (taskLock)
            {
                if (RefOptions.ContainsKey(typeName))
                {
                    return(RefOptions[typeName]);
                }

                if (!RefCalls.ContainsKey(typeName))
                {
                    var fetch = FetchRouteObjectsAsync();
                    RefCalls.Add(typeName, fetch);
                }
                objectsTask = RefCalls[typeName];
            }
            return(await objectsTask);

            async Task <RouteOption> FetchRouteObjectsAsync()
            {
                var routeString = await localStorage.GetItemAsync <string>(typeName);

                if (routeString.IsNullOrWhiteSpace())
                {
                    Console.WriteLine($"No route definition for `{typeName}`");
                    return(new RouteOption {
                        options = new object[] { }
                    });
                }
                var routeInfo = Newtonsoft.Json.JsonConvert.DeserializeObject <Route>(routeString);
                var idProp    = routeInfo.Properties
                                .Where(prop => prop.IsIdentfier)
                                .First(
                    (prop, next) => prop.Name,
                    () => "id");

                Console.WriteLine($"ID PROP = `{idProp}`");
                var nameProp = routeInfo.Properties
                               .Where(prop => prop.IsTitle)
                               .First(
                    (prop, next) => prop.Name,
                    () => "id");
                var nameType = routeInfo.Properties
                               .Where(prop => prop.IsTitle)
                               .First(
                    (prop, next) => prop.Type,
                    () => "string");

                Console.WriteLine($"NAME PROP = `{nameProp}`");
                return(await TableData.TableAsync(typeName,
                                                  localStorage,
                                                  objs =>
                {
                    var options = objs
                                  .Select(
                        obj =>
                    {
                        var jValObjName = obj[nameProp];
                        var nameValue = (jValObjName as JValue).Value <string>();

                        var jValObjId = obj[idProp];
                        var idValue = (jValObjId as JValue).Value <string>();

                        return idValue.PairWithKey(nameValue);
                    })
                                  .Cast <object>()
                                  .ToArray();
                    var routeOption = new RouteOption
                    {
                        nameType = nameType,
                        options = options,
                    };
                    RefOptions.Add(typeName, routeOption);
                    return routeOption;
                },
                                                  (why) => new RouteOption { options = new object[] { } }));
            }
        }
Exemplo n.º 8
0
 public abstract State getNewState(State state, RouteOption routeOption);
Exemplo n.º 9
0
 public abstract MapPosition getNewPosition(MapPosition position, State state, RouteOption routeOption);