public void NonMatching(string input, string pattern)
        {
            var router = new Router <int>(new MatchingRoutesSelectionStrategy <int>());

            router.Register("", RouterPatternParser.Parse(pattern), 1);

            var result = router.Match(CreateMessage(input));

            Assert.Empty(result);
        }
Exemple #2
0
        public void Run(string left, string right, int expected)
        {
            var comparer = new RouteScoreComparer();

            var result = comparer.Compare(
                RouterPatternParser.Parse(left),
                RouterPatternParser.Parse(right)
                );

            Assert.Equal(expected, result);
        }
        private void ImplementRegisterRoute(ILProcessor il, TypeDefinition functionType, FieldDefinition serviceField, VariableDefinition modelVariable, PluginMetadata service, RouteMetadata route)
        {
            var key   = $"Handle_{serviceField.Name}_{route.Method.Name}";
            var isRpc = RouteHandlerFactory.IsRpc(route);

            // create private handler function
            var method = functionType.Methods.SingleOrDefault(x => x.Name == key);

            if (method == null)
            {
                var returnType = _module.ImportReference(isRpc ? _rpcReturnType : _busReturnType);
                method = new MethodDefinition(key, MethodAttributes.Private | MethodAttributes.HideBySig, returnType);
                method.Parameters.Add(new ParameterDefinition("message", ParameterAttributes.None, _messageType));
                method.Parameters.Add(new ParameterDefinition("cancellationToken", ParameterAttributes.None, _cancellationTokenType));
                functionType.Methods.Add(method);

                ImplementRouteHandler(method, serviceField, route, isRpc);
            }

            il.Emit(OpCodes.Ldloc, modelVariable);

            // RoutePatternParser.Parse("...")
            il.Emit(OpCodes.Ldstr, RouterPatternParser.UnParse(route.Route));
            var routePatternParserType = _routingModule.GetType("Toxon.Micro.RabbitBlog.Routing.Patterns.RouterPatternParser").Resolve();
            var patternParse           = _module.ImportReference(routePatternParserType.Methods.Single(x => x.Name == "Parse"));

            il.Emit(OpCodes.Call, patternParse);

            // new Func<...>(method)
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Ldftn, method);
            il.Emit(OpCodes.Newobj, _module.ImportReference(isRpc ? _rpcFuncConstructor : _busFuncConstructor));

            // ...
            il.Emit(OpCodes.Ldc_I4, (int)(isRpc ? RouteExecution.Synchronous : RouteExecution.Asynchronous));
            il.Emit(OpCodes.Ldc_I4, (int)(isRpc ? RouteMode.Capture : RouteMode.Observe));
            var cancellationTokenNone = _module.ImportReference(_cancellationTokenType.Resolve().Properties.Single(x => x.Name == "None").GetMethod);

            il.Emit(OpCodes.Call, cancellationTokenNone);

            // model.RegisterAsync(...)
            var registerMethod = _module.ImportReference(isRpc ? _rpcRegisterMethod : _busRegisterMethod);

            il.Emit(OpCodes.Callvirt, registerMethod);
        }
Exemple #4
0
 public MessageRouteAttribute(string route)
     : this(RouterPatternParser.Parse(route))
 {
 }