Apache.NMS.ActiveMQ.MessageConsumer.AfterMessageIsConsumed C# (CSharp) Method

AfterMessageIsConsumed() public method

public AfterMessageIsConsumed ( MessageDispatch dispatch, bool expired ) : void
dispatch Apache.NMS.ActiveMQ.Commands.MessageDispatch
expired bool
return void
        public void AfterMessageIsConsumed(MessageDispatch dispatch, bool expired)
        {
            if(this.unconsumedMessages.Closed)
            {
                return;
            }

            if(expired)
            {
                lock(this.dispatchedMessages)
                {
                    this.dispatchedMessages.Remove(dispatch);
                }

                AckLater(dispatch, AckType.DeliveredAck);
            }
            else
            {
                if(this.session.IsTransacted)
                {
                    // Do nothing.
                }
                else if(this.IsAutoAcknowledgeEach)
                {
                    if(this.deliveringAcks.CompareAndSet(false, true))
                    {
                        lock(this.dispatchedMessages)
                        {
                            if(this.dispatchedMessages.Count != 0)
                            {
                                MessageAck ack = MakeAckForAllDeliveredMessages(AckType.ConsumedAck);
                                if(ack != null)
                                {
                                    this.dispatchedMessages.Clear();
                                    this.session.SendAck(ack);
                                }
                            }
                        }
                        this.deliveringAcks.Value = false;
                    }
                }
                else if(this.IsAutoAcknowledgeBatch)
                {
                    AckLater(dispatch, AckType.ConsumedAck);
                }
                else if(IsClientAcknowledge || IsIndividualAcknowledge)
                {
                    bool messageAckedByConsumer = false;

                    lock(this.dispatchedMessages)
                    {
                        messageAckedByConsumer = this.dispatchedMessages.Contains(dispatch);
                    }

                    if(messageAckedByConsumer)
                    {
                        AckLater(dispatch, AckType.DeliveredAck);
                    }
                }
                else
                {
                    throw new NMSException("Invalid session state.");
                }
            }
        }