コード例 #1
0
ファイル: Dispose.cs プロジェクト: szehetner/amqpnetlite
        internal override void ReadField(ByteBuffer buffer, int index, byte formatCode)
        {
            switch (index)
            {
            case 0:
                this.role = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 1:
                this.first = Encoder.ReadUInt(buffer, formatCode);
                break;

            case 2:
                this.last = Encoder.ReadUInt(buffer, formatCode);
                break;

            case 3:
                this.settled = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 4:
                this.state = (DeliveryState)Encoder.ReadObject(buffer, formatCode);
                break;

            case 5:
                this.batchable = Encoder.ReadBoolean(buffer, formatCode);
                break;

            default:
                Fx.Assert(false, "Invalid field index");
                break;
            }
        }
コード例 #2
0
ファイル: Transfer.cs プロジェクト: szehetner/amqpnetlite
        internal override void ReadField(ByteBuffer buffer, int index, byte formatCode)
        {
            switch (index)
            {
            case 0:
                this.handle = Encoder.ReadUInt(buffer, formatCode);
                break;

            case 1:
                this.deliveryId = Encoder.ReadUInt(buffer, formatCode);
                break;

            case 2:
                this.deliveryTag = Encoder.ReadBinary(buffer, formatCode);
                break;

            case 3:
                this.messageFormat = Encoder.ReadUInt(buffer, formatCode);
                break;

            case 4:
                this.settled = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 5:
                this.more = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 6:
                this.rcvSettleMode = (ReceiverSettleMode)Encoder.ReadUByte(buffer, formatCode);
                break;

            case 7:
                this.state = (DeliveryState)Encoder.ReadObject(buffer, formatCode);
                break;

            case 8:
                this.resume = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 9:
                this.aborted = Encoder.ReadBoolean(buffer, formatCode);
                break;

            case 10:
                this.batchable = Encoder.ReadBoolean(buffer, formatCode);
                break;

            default:
                Fx.Assert(false, "Invalid field index");
                break;
            }
        }
コード例 #3
0
        /// <summary>
        /// Sends a disposition for the message.
        /// </summary>
        /// <param name="message">The message to be disposed (a disposition performative will be sent for this message).</param>
        /// <param name="deliveryState">The delivery state to set on disposition.</param>
        /// <param name="settled">The settled flag on disposition.</param>
        public void DisposeMessage(Message message, DeliveryState deliveryState, bool settled)
        {
            if (settled && this.autoRestore)
            {
                lock (this.ThisLock)
                {
                    if (this.restored++ >= this.credit / 2)
                    {
                        this.restored = 0;
                        this.SendFlow(this.deliveryCount, this.credit, false);
                    }
                }
            }

            Delivery delivery = message.Delivery;
            if (delivery == null || delivery.Settled)
            {
                return;
            }

            this.Session.DisposeDelivery(this.role, delivery, deliveryState, settled);
        }
コード例 #4
0
ファイル: Delivery.cs プロジェクト: Eclo/amqpnetlite
 public void OnStateChange(DeliveryState state)
 {
     this.State = state;
     this.Link.OnDeliveryStateChanged(this);
 }
コード例 #5
0
ファイル: Session.cs プロジェクト: kornys/amqpnetlite
        internal void DisposeDelivery(bool role, Delivery delivery, DeliveryState state, bool settled)
        {
            Delivery current = null;
            lock (this.ThisLock)
            {
                LinkedList deliveryList = role ? this.incomingList : this.outgoingList;
                current = (Delivery)deliveryList.First;
                while (current != null)
                {
                    if (current == delivery)
                    {
                        if (settled)
                        {
                            deliveryList.Remove(current);
                        }

                        break;
                    }

                    current = (Delivery)current.Next;
                }
            }

            if (current != null)
            {
                current.Settled = settled;
                current.State = state;
                Dispose dispose = new Dispose()
                {
                    Role = role,
                    First = current.DeliveryId,
                    Settled = settled,
                    State = state
                };

                this.SendCommand(dispose);
            }
        }
コード例 #6
0
ファイル: Context.cs プロジェクト: rajeshganesh/amqpnetlite
 /// <summary>
 /// Disposes the request. If required, a disposition frame is sent to
 /// the peer to acknowledge the message.
 /// </summary>
 /// <param name="deliveryState">The delivery state to send.</param>
 protected void Dispose(DeliveryState deliveryState)
 {
     this.Link.DisposeMessage(this.Message, deliveryState, true);
     this.state = ContextState.Completed;
 }
コード例 #7
0
        internal void Send(Message message, DeliveryState deliveryState, OutcomeCallback callback, object state)
        {
            const int reservedBytes = 40;
            #if NETFX || NETFX40 || DOTNET
            var buffer = message.Encode(this.Session.Connection.BufferManager, reservedBytes);
            #else
            var buffer = message.Encode(reservedBytes);
            #endif
            if (buffer.Length < 1)
            {
                throw new ArgumentException("Cannot send an empty message.");
            }

            Delivery delivery = new Delivery()
            {
                Message = message,
                Buffer = buffer,
                ReservedBufferSize = reservedBytes,
                State = deliveryState,
                Link = this,
                OnOutcome = callback,
                UserToken = state,
                Settled = this.settleMode == SenderSettleMode.Settled || callback == null
            };

            lock (this.ThisLock)
            {
                this.ThrowIfDetaching("Send");

                if (this.credit <= 0 || this.writing)
                {
                    this.outgoingList.Add(delivery);
                    return;
                }

                delivery.Tag = Delivery.GetDeliveryTag(this.deliveryCount);
                this.credit--;
                this.deliveryCount++;
                this.writing = true;
            }

            this.WriteDelivery(delivery);
        }
コード例 #8
0
ファイル: SenderLink.cs プロジェクト: farukc/amqpnetlite
        internal void Send(Message message, DeliveryState deliveryState, OutcomeCallback callback, object state)
        {
            var buffer = message.Encode();
            if (buffer.Length < 1)
            {
                throw new ArgumentException("Cannot send an empty message.");
            }

            Delivery delivery = new Delivery()
            {
                Message = message,
                Buffer = buffer,
                State = deliveryState,
                Link = this,
                OnOutcome = callback,
                UserToken = state,
                Settled = this.settleMode == SenderSettleMode.Settled || callback == null
            };

            lock (this.ThisLock)
            {
                this.ThrowIfDetaching("Send");

                if (this.credit <= 0 || this.writing)
                {
                    this.outgoingList.Add(delivery);
                    return;
                }

                delivery.Tag = GetDeliveryTag(this.deliveryCount);
                this.credit--;
                this.deliveryCount++;
                this.writing = true;
            }

            this.WriteDelivery(delivery);
        }
コード例 #9
0
 internal DispositionContext(ListenerLink link, Message message, DeliveryState deliveryState, bool settled)
     : base(link, message)
 {
     this.Settled = settled;
 }
コード例 #10
0
        /// <summary>
        /// Sends a disposition for the message.
        /// </summary>
        /// <param name="message">The message to be disposed (a disposition performative will be sent for this message).</param>
        /// <param name="deliveryState">The delivery state to set on disposition.</param>
        /// <param name="settled">The settled flag on disposition.</param>
        public void DisposeMessage(Message message, DeliveryState deliveryState, bool settled)
        {
            Delivery delivery = message.Delivery;
            if (delivery == null || delivery.Settled)
            {
                return;
            }

            this.Session.DisposeDelivery(this.role, delivery, deliveryState, settled);
        }
コード例 #11
0
ファイル: Context.cs プロジェクト: helljai/amqpnetlite
 /// <summary>
 /// Disposes the request. If required, a disposition frame is sent to
 /// the peer to acknowledge the message.
 /// </summary>
 /// <param name="deliveryState">The delivery state to send.</param>
 protected void Dispose(DeliveryState deliveryState)
 {
     this.Link.DisposeMessage(this.Message, deliveryState, true);
 }