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