Inheritance: DescribedList
Ejemplo n.º 1
0
 public void DisposeMessage(AmqpMessage message, DeliveryState deliveryState, bool settled, bool batchable)
 {
     this.receiver.DisposeMessage(message, deliveryState, settled, batchable);
 }
Ejemplo n.º 2
0
            public void DisposeDelivery(Delivery delivery, bool settled, DeliveryState state, bool noFlush)
            {
                if (delivery.Settled)
                {
                    this.OnWindowMoved(1);
                    return;
                }

                bool scheduleTimer = false;
                Delivery toDispose = null;

                lock (this.syncRoot)
                {
                    delivery.StateChanged = true;
                    delivery.Settled = settled;
                    delivery.State = state;

                    if (!delivery.Batchable)
                    {
                        delivery.StateChanged = false;
                        toDispose = delivery;
                        if (delivery.Settled)
                        {
                            Delivery.Remove(ref this.firstUnsettled, ref this.lastUnsettled, delivery);
                        }
                    }
                    else if (this.sendingDisposition || noFlush)
                    {
                        return;
                    }
                    else if (this.session.settings.DispositionInterval == TimeSpan.Zero ||
                        ++this.needDispositionCount >= this.session.settings.DispositionThreshold)
                    {
                        this.sendingDisposition = true;
                        this.needDispositionCount = 0;
                    }
                    else if (!this.timerScheduled)
                    {
                        this.timerScheduled = true;
                        scheduleTimer = true;
                    }
                }

                if (toDispose != null)
                {
                    this.SendDisposition(new DispositionInfo() { First = toDispose });
                    if (delivery.Settled)
                    {
                        this.OnWindowMoved(1);
                    }
                }
                else if (scheduleTimer)
                {
                    Fx.Assert(this.dispositionTimer != null, "Disposition timer cannot be null");
                    this.dispositionTimer.Change(this.session.settings.DispositionInterval, Timeout.InfiniteTimeSpan);
                }
                else
                {
                    this.SendDisposition();
                }
            }
Ejemplo n.º 3
0
 void ThrowIfRejected(DeliveryState deliveryState)
 {
     if (deliveryState.DescriptorCode == Rejected.Code)
     {
         Rejected rejected = (Rejected)deliveryState;
         throw AmqpException.FromError(rejected.Error);
     }
 }
Ejemplo n.º 4
0
 public void DisposeDelivery(AmqpLink link, Delivery delivery, bool settled, DeliveryState state, bool noFlush)
 {
     if (link.IsReceiver)
     {
         this.incomingChannel.DisposeDelivery(delivery, settled, state, noFlush);
     }
     else
     {
         this.outgoingChannel.DisposeDelivery(delivery, settled, state, noFlush);
     }
 }