protected void OnReceiveFirstTransfer(Transfer transfer) { Fx.Assert(transfer.DeliveryId.HasValue, "The first transfer must have a delivery id."); this.nextDeliveryId = transfer.DeliveryId.Value; }
public bool TrySendTransfer(Delivery delivery, Transfer transfer, ArraySegment<byte>[] payload) { lock (this.SyncRoot) { if (this.outgoingWindow == 0) { AmqpTrace.Provider.AmqpSessionWindowClosed(this, (int)this.nextOutgoingId.Value); return false; } this.nextOutgoingId.Increment(); if (this.outgoingWindow < uint.MaxValue) { this.outgoingWindow--; } if (delivery != null) { this.AddDelivery(delivery); transfer.DeliveryId = delivery.DeliveryId.Value; } this.Session.SendCommand(transfer, payload); } return true; }
public bool OnAcceptTransfer(Delivery delivery, Transfer transfer, bool newDelivery) { try { this.incomingChannel.OnAcceptTransfer(delivery, transfer, newDelivery); return true; } catch (AmqpException exception) { this.SafeClose(exception); return false; } }
// delivery MUST be null for continued transfer fragments public bool TrySendTransfer(Delivery delivery, Transfer transfer, ArraySegment<byte>[] payload) { return this.outgoingChannel.TrySendTransfer(delivery, transfer, payload); }
protected override void OnProcessTransfer(Delivery delivery, Transfer transfer, Frame rawFrame) { throw new NotImplementedException(); }
public override bool CreateDelivery(Transfer transfer, out Delivery delivery) { throw new NotImplementedException(); }
public void OnAcceptTransfer(Delivery delivery, Transfer transfer, bool newDelivery) { if (!this.transferEverReceived) { this.OnReceiveFirstTransfer(transfer); this.transferEverReceived = true; } bool canAccept = false; lock (this.SyncRoot) { if (this.incomingWindow > 0) { canAccept = true; if (newDelivery) { this.AddDelivery(delivery); } this.nextIncomingId.Increment(); if (this.incomingWindow < uint.MaxValue) { this.incomingWindow--; } } } if (!canAccept) { AmqpTrace.Provider.AmqpSessionWindowClosed(this, (int)this.nextIncomingId.Value); throw new AmqpException(AmqpErrorCode.WindowViolation, null); } if (!newDelivery) { // continued transfer for existing delivery: move window forward this.OnWindowMoved(1); } }