コード例 #1
0
ファイル: Bus.cs プロジェクト: lulzzz/Zebus
        public async Task <IDisposable> SubscribeAsync([NotNull] SubscriptionRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (!request.ThereIsNoHandlerButIKnowWhatIAmDoing)
            {
                EnsureMessageHandlerInvokerExists(request.Subscriptions);
            }

            request.MarkAsSubmitted();

            if (request.Batch != null)
            {
                await request.Batch.WhenSubmittedAsync().ConfigureAwait(false);
            }

            await AddSubscriptionsAsync(request).ConfigureAwait(false);

            var subscriptions = request.Subscriptions.ToList();

            return(new DisposableAction(() => RemoveSubscriptions(subscriptions)));
        }
コード例 #2
0
ファイル: TestBus.cs プロジェクト: ocoanet/Zebus
        public async Task <IDisposable> SubscribeAsync(SubscriptionRequest request, Action <IMessage> handler)
        {
            request.MarkAsSubmitted();

            if (request.Batch != null)
            {
                await request.Batch.WhenSubmittedAsync().ConfigureAwait(false);
            }

            var handlerKeys = request.Subscriptions.Select(x => new HandlerKey(x.MessageTypeId.GetMessageType(), default)).ToList();

            foreach (var handlerKey in handlerKeys)
            {
                _handlers[handlerKey] = x =>
                {
                    handler(x);
                    return(null);
                };
            }

            await AddSubscriptionsAsync(request).ConfigureAwait(false);

            return(new DisposableAction(() =>
            {
                RemoveSubscriptions(request);
                _handlers.RemoveRange(handlerKeys);
            }));
        }
コード例 #3
0
ファイル: TestBus.cs プロジェクト: zhangz/Zebus
        public Task <IDisposable> SubscribeAsync(SubscriptionRequest request, Action <IMessage> handler)
        {
            request.MarkAsSubmitted();

            lock (_subscriptions)
            {
                _subscriptions.AddRange(request.Subscriptions);
            }

            var handlerKeys = request.Subscriptions.Select(x => new HandlerKey(x.MessageTypeId.GetMessageType(), default(PeerId))).ToList();

            foreach (var handlerKey in handlerKeys)
            {
                _handlers[handlerKey] = x =>
                {
                    handler(x);
                    return(null);
                };
            }

            return(Task.FromResult <IDisposable>(new DisposableAction(() =>
            {
                lock (_subscriptions)
                {
                    _subscriptions.RemoveRange(request.Subscriptions);
                }

                _handlers.RemoveRange(handlerKeys);
            })));
        }
コード例 #4
0
        public async Task <IDisposable> SubscribeAsync(SubscriptionRequest request, Action <IMessage> handler)
        {
            request.MarkAsSubmitted();

            if (request.Batch != null)
            {
                await request.Batch.WhenSubmittedAsync().ConfigureAwait(false);
            }

            var handlerKeys = request.Subscriptions.Select(x => new HandlerKey(x.MessageTypeId.GetMessageType() !, default)).ToList();
コード例 #5
0
ファイル: TestBus.cs プロジェクト: ocoanet/Zebus
        public async Task <IDisposable> SubscribeAsync(SubscriptionRequest request)
        {
            request.MarkAsSubmitted();

            if (request.Batch != null)
            {
                await request.Batch.WhenSubmittedAsync().ConfigureAwait(false);
            }

            await AddSubscriptionsAsync(request).ConfigureAwait(false);

            return(new DisposableAction(() => RemoveSubscriptions(request)));
        }
コード例 #6
0
ファイル: TestBus.cs プロジェクト: zhangz/Zebus
        public Task <IDisposable> SubscribeAsync(SubscriptionRequest request)
        {
            request.MarkAsSubmitted();

            lock (_subscriptions)
            {
                _subscriptions.AddRange(request.Subscriptions);
            }

            return(Task.FromResult <IDisposable>(new DisposableAction(() =>
            {
                lock (_subscriptions)
                {
                    _subscriptions.RemoveRange(request.Subscriptions);
                }
            })));
        }
コード例 #7
0
ファイル: Bus.cs プロジェクト: lulzzz/Zebus
        public async Task <IDisposable> SubscribeAsync([NotNull] SubscriptionRequest request, [NotNull] Action <IMessage> handler)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            request.MarkAsSubmitted();

            var eventHandlerInvokers = request.Subscriptions
                                       .GroupBy(x => x.MessageTypeId)
                                       .Select(x => new DynamicMessageHandlerInvoker(handler, x.Key.GetMessageType(), x.Select(s => s.BindingKey).ToList(), _predicateBuilder))
                                       .ToList();

            if (request.Batch != null)
            {
                await request.Batch.WhenSubmittedAsync().ConfigureAwait(false);
            }

            foreach (var eventHandlerInvoker in eventHandlerInvokers)
            {
                _messageDispatcher.AddInvoker(eventHandlerInvoker);
            }

            await AddSubscriptionsAsync(request).ConfigureAwait(false);

            var subscriptions = request.Subscriptions.ToList();

            return(new DisposableAction(() =>
            {
                foreach (var eventHandlerInvoker in eventHandlerInvokers)
                {
                    _messageDispatcher.RemoveInvoker(eventHandlerInvoker);
                }

                RemoveSubscriptions(subscriptions);
            }));
        }