Пример #1
0
        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;
            }
        }
Пример #2
0
 public virtual Task OnMessageReceivingAsync(MessageReceivingEventArgs e,
                                             CancellationToken cancellationToken = default(CancellationToken))
 {
     return(Task.Run(async() =>
     {
         await MessageReceiving?.Invoke(this, e);
     }, cancellationToken));
 }
Пример #3
0
        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);
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
 public override Task OnMessageReceivingAsync(MessageReceivingEventArgs e, CancellationToken cancellationToken = default(CancellationToken))
 {
     LatestMessageReceivingEventArgs = e;
     return(base.OnMessageReceivingAsync(e, cancellationToken));
 }
Пример #6
0
 public void OnReceiving(MessageReceivingEventArgs e)
 {
     ForEach(item => item.OnReceiving(e));
 }
Пример #7
0
 public override void OnReceiving(MessageReceivingEventArgs e)
 {
 }