Exemplo n.º 1
0
 public Task <IAsyncDisposable> RegisterSubscriber(object instance, ISubscriberRegistrationInterceptor interceptor)
 {
     return(AggregateSubscriberEventHandlers(instance, interceptor));
 }
Exemplo n.º 2
0
        private Task <IAsyncDisposable> AggregateSubscriberEventHandlers(object instance, ISubscriberRegistrationInterceptor interceptor)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            IEnumerable <Type> typesToExplore = GetTypesToExplore(instance);

            List <Task <IAsyncDisposable> > tasks = new List <Task <IAsyncDisposable> >();

            foreach (Type type in typesToExplore)
            {
                foreach (MethodInfo method in type.GetPublicInstanceMethods())
                {
                    if (interceptor.IsSubscriberHandler(method))
                    {
                        string topicUri = interceptor.GetTopicUri(method);

                        SubscribeOptions subscribeOptions =
                            interceptor.GetSubscribeOptions(method);

                        IWampTopicProxy topicProxy =
                            mProxy.TopicContainer.GetTopicByUri(topicUri);

                        IWampRawTopicClientSubscriber methodInfoSubscriber =
                            new MethodInfoSubscriber(instance, method, topicUri);

                        Task <IAsyncDisposable> task =
                            topicProxy.Subscribe(methodInfoSubscriber, subscribeOptions);

                        tasks.Add(task);
                    }
                }
            }

            Task <IAsyncDisposable> result = tasks.ToAsyncDisposableTask();

            return(result);
        }
 public Task <IAsyncDisposable> RegisterSubscriber(object instance, ISubscriberRegistrationInterceptor interceptor)
 {
     return(mSubscriberRegistrar.RegisterSubscriber(instance, interceptor));
 }