public void DisposeMessage(AmqpMessage message, DeliveryState deliveryState, bool settled, bool batchable) { this.receiver.DisposeMessage(message, deliveryState, settled, batchable); }
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(); } }
void ThrowIfRejected(DeliveryState deliveryState) { if (deliveryState.DescriptorCode == Rejected.Code) { Rejected rejected = (Rejected)deliveryState; throw AmqpException.FromError(rejected.Error); } }
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); } }