bool DoExecute(MessageResult ctx, IObserverHandler<IMessage> handler, AtomicInteger barrier) { var e = new MessageReceivingEventArgs (ctx, handler.Target); try { ListnerManager.OnReceiving(e); if (!e.Ignored) ctx.results.Add(DelegateInvoker.Invoke<IMessage>(handler, ctx.Request.Sender, ctx.Request.ToMessage())); return true; } catch (Exception ex) { var re = new MessageExceptionEventArgs (ctx,ex); ListnerManager.OnReceivingException(re); ctx.InnerExceptions.Add(ex); return !re.Canceled; } finally { barrier--; if (barrier == 0) { ListnerManager.OnReceived(new MessageEventArgs(ctx)); ListnerManager.OnSent(e); OnCompleted(ctx); } else ListnerManager.OnReceived(new MessageEventArgs(ctx)); e = null; } }
public virtual Task OnMessageReceivingAsync(MessageReceivingEventArgs e, CancellationToken cancellationToken = default(CancellationToken)) { return(Task.Run(async() => { await MessageReceiving?.Invoke(this, e); }, cancellationToken)); }
public void Connect() { if (disposedValue) { throw new ObjectDisposedException(nameof(_consumer)); } var consumer = _consumer = ConsumerBuilder ?.Configure(Configurator) ?.Build(); if (_messageConfiguration.Subscription?.Any() == true) { consumer?.Subscribe(_messageConfiguration.Subscription); } Task.Delay(500).GetAwaiter().GetResult(); var cancellationTokenSource = _cancellationTokenSource = new CancellationTokenSource(); Task.Run(() => { while (!cancellationTokenSource.IsCancellationRequested) { if (consumer.Consume(out var msg, PoolTimeout)) { var topic = msg.Topic; var timestamp = #if NET45 new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.FromHours(0)) .AddMilliseconds( #else DateTimeOffset.FromUnixTimeMilliseconds( #endif msg.Timestamp.UnixTimestampMs); var message = msg.Value ?? "{}"; var wrapper = new MessageWrapper(topic, message, timestamp); var eventArgs = new MessageReceivingEventArgs(wrapper); _messageConfiguration.OnMessageReceivingAsync( eventArgs, cancellationTokenSource.Token); } } }, cancellationTokenSource.Token); }
bool DoExecute(MessageResult ctx, IObserverHandler <IMessage> handler, AtomicInteger barrier) { var e = new MessageReceivingEventArgs(ctx, handler.Target); try { ListnerManager.OnReceiving(e); if (!e.Ignored) { ctx.results.Add(DelegateInvoker.Invoke <IMessage>(handler, ctx.Request.Sender, ctx.Request.ToMessage())); } return(true); } catch (Exception ex) { var re = new MessageExceptionEventArgs(ctx, ex); ListnerManager.OnReceivingException(re); ctx.InnerExceptions.Add(ex); return(!re.Canceled); } finally { barrier--; if (barrier == 0) { ListnerManager.OnReceived(new MessageEventArgs(ctx)); ListnerManager.OnSent(e); OnCompleted(ctx); } else { ListnerManager.OnReceived(new MessageEventArgs(ctx)); } e = null; } }
public override Task OnMessageReceivingAsync(MessageReceivingEventArgs e, CancellationToken cancellationToken = default(CancellationToken)) { LatestMessageReceivingEventArgs = e; return(base.OnMessageReceivingAsync(e, cancellationToken)); }
public void OnReceiving(MessageReceivingEventArgs e) { ForEach(item => item.OnReceiving(e)); }
public override void OnReceiving(MessageReceivingEventArgs e) { }