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))); }
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); })); }
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); }))); }
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();
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))); }
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); } }))); }
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); })); }