Beispiel #1
0
        /// <summary>The add pending confirm.</summary>
        /// <param name="listener">The listener.</param>
        /// <param name="seq">The seq.</param>
        /// <param name="pendingConfirm">The pending confirm.</param>
        public void AddPendingConfirm(IPublisherCallbackChannelListener listener, long seq, PendingConfirm pendingConfirm)
        {
            var pendingConfirmsForListener = this.pendingConfirms[listener];

            AssertUtils.ArgumentNotNull(pendingConfirmsForListener, "Listener not registered");
            lock (this.pendingConfirms)
            {
                pendingConfirmsForListener.Add(seq, pendingConfirm);
            }

            this.listenerForSeq.TryAdd(seq, listener);
        }
Beispiel #2
0
 private void DoHandleConfirm(bool ack, IPublisherCallbackChannelListener listener, PendingConfirm pendingConfirm)
 {
     try
     {
         if (listener.IsConfirmListener)
         {
             this.logger.Debug(m => m("Sending confirm " + pendingConfirm));
             listener.HandleConfirm(pendingConfirm, ack);
         }
     }
     catch (Exception e)
     {
         this.logger.Error(m => m("Exception delivering confirm"), e);
     }
 }
Beispiel #3
0
        public SortedDictionary <long, PendingConfirm> AddListener(IPublisherCallbackChannelListener listener)
        {
            AssertUtils.ArgumentNotNull(listener, "Listener cannot be null");
            if (this.listeners.Count == 0)
            {
                this.AddConfirmListener((model, args) => this.HandleAck((long)args.DeliveryTag, args.Multiple), (model, args) => this.HandleNack((long)args.DeliveryTag, args.Multiple));
                this.AddReturnListener((model, args) => this.HandleReturn(args.ReplyCode, args.ReplyText, args.Exchange, args.RoutingKey, args.BasicProperties, args.Body));
            }

            if (!this.listeners.Values.Contains(listener))
            {
                this.listeners.Add(listener.Uuid, listener);
                this.pendingConfirms.Add(listener, new SortedDictionary <long, PendingConfirm>());
                this.logger.Debug(m => m("Added listener " + listener));
            }

            return(this.pendingConfirms.Get(listener));
        }
Beispiel #4
0
        public bool RemoveListener(IPublisherCallbackChannelListener listener)
        {
            var mappedListener = this.listeners.GetAndRemove(listener.Uuid);
            var result         = mappedListener != null;

            if (result && this.listeners.Count == 0)
            {
                this.RemoveConfirmListener((model, args) => this.HandleAck((long)args.DeliveryTag, args.Multiple), (model, args) => this.HandleNack((long)args.DeliveryTag, args.Multiple));
                this.RemoveReturnListener((model, args) => this.HandleReturn(args.ReplyCode, args.ReplyText, args.Exchange, args.RoutingKey, args.BasicProperties, args.Body));
            }

            var list = this.listenerForSeq.ToList();

            foreach (var item in list)
            {
                if (item.Value == listener)
                {
                    this.listenerForSeq.GetAndRemove(item.Key);
                }
            }

            this.pendingConfirms.Remove(listener);
            return(result);
        }
        /// <summary>The add pending confirm.</summary>
        /// <param name="listener">The listener.</param>
        /// <param name="seq">The seq.</param>
        /// <param name="pendingConfirm">The pending confirm.</param>
        public void AddPendingConfirm(IPublisherCallbackChannelListener listener, long seq, PendingConfirm pendingConfirm)
        {
            var pendingConfirmsForListener = this.pendingConfirms[listener];
            AssertUtils.ArgumentNotNull(pendingConfirmsForListener, "Listener not registered");
            lock (this.pendingConfirms)
            {
                pendingConfirmsForListener.Add(seq, pendingConfirm);
            }

            this.listenerForSeq.TryAdd(seq, listener);
        }
 private void DoHandleConfirm(bool ack, IPublisherCallbackChannelListener listener, PendingConfirm pendingConfirm)
 {
     try
     {
         if (listener.IsConfirmListener)
         {
             this.logger.Debug(m => m("Sending confirm " + pendingConfirm));
             listener.HandleConfirm(pendingConfirm, ack);
         }
     }
     catch (Exception e)
     {
         this.logger.Error(m => m("Exception delivering confirm"), e);
     }
 }
        public bool RemoveListener(IPublisherCallbackChannelListener listener)
        {
            var mappedListener = this.listeners.GetAndRemove(listener.Uuid);
            var result = mappedListener != null;
            if (result && this.listeners.Count == 0)
            {
                this.RemoveConfirmListener((model, args) => this.HandleAck((long)args.DeliveryTag, args.Multiple), (model, args) => this.HandleNack((long)args.DeliveryTag, args.Multiple));
                this.RemoveReturnListener((model, args) => this.HandleReturn(args.ReplyCode, args.ReplyText, args.Exchange, args.RoutingKey, args.BasicProperties, args.Body));
            }

            var list = this.listenerForSeq.ToList();
            foreach (var item in list)
            {
                if (item.Value == listener)
                {
                    this.listenerForSeq.GetAndRemove(item.Key);
                }
            }

            this.pendingConfirms.Remove(listener);
            return result;
        }
        public SortedDictionary<long, PendingConfirm> AddListener(IPublisherCallbackChannelListener listener)
        {
            AssertUtils.ArgumentNotNull(listener, "Listener cannot be null");
            if (this.listeners.Count == 0)
            {
                this.AddConfirmListener((model, args) => this.HandleAck((long)args.DeliveryTag, args.Multiple), (model, args) => this.HandleNack((long)args.DeliveryTag, args.Multiple));
                this.AddReturnListener((model, args) => this.HandleReturn(args.ReplyCode, args.ReplyText, args.Exchange, args.RoutingKey, args.BasicProperties, args.Body));
            }

            if (!this.listeners.Values.Contains(listener))
            {
                this.listeners.Add(listener.Uuid, listener);
                this.pendingConfirms.Add(listener, new SortedDictionary<long, PendingConfirm>());
                this.logger.Debug(m => m("Added listener " + listener));
            }

            return this.pendingConfirms.Get(listener);
        }