Example #1
0
        public void DiscoverRoutesOn([NotNull] RpcServerBase serverObject)
        {
            var type = serverObject.GetType();
            const BindingFlags allKinds = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;
            var methods = type.GetMethods(allKinds);

            foreach (var method in methods)
            {
                var handlerAttr = method.GetCustomAttribute <RpcMethodHandlerAttribute>();

                if (handlerAttr == null)
                {
                    continue;
                }

                var thiz = method.IsStatic ? null : serverObject;
                var del  = (RouteHandler)Delegate.CreateDelegate(typeof(RouteHandler), thiz, method);

                AddRoute(handlerAttr.MethodName, del);
            }
        }