示例#1
0
        /// <summary>
        /// Creates final decision from multiple decisions.
        /// Final decision has bests choices for each decision.
        /// </summary>
        internal static Decision CreateFinalDecision(Decision final, Decision decision)
        {
            bool                        allow   = false;
            PutBackDecision             putBack = PutBackDecision.No;
            bool                        save    = false;
            DeliveryAcknowledgeDecision ack     = DeliveryAcknowledgeDecision.None;

            if (decision.Allow)
            {
                allow = true;
            }

            if (decision.PutBack != PutBackDecision.No)
            {
                putBack = decision.PutBack;
            }

            if (decision.SaveMessage)
            {
                save = true;
            }

            if (decision.Acknowledge == DeliveryAcknowledgeDecision.Always)
            {
                ack = DeliveryAcknowledgeDecision.Always;
            }

            else if (decision.Acknowledge == DeliveryAcknowledgeDecision.IfSaved && final.Acknowledge == DeliveryAcknowledgeDecision.None)
            {
                ack = DeliveryAcknowledgeDecision.IfSaved;
            }

            return(new Decision(allow, save, putBack, ack));
        }
示例#2
0
        /// <summary>
        /// Creates final decision from multiple decisions.
        /// Final decision has bests choices for each decision.
        /// </summary>
        internal static Decision CreateFinalDecision(Decision final, Decision decision)
        {
            bool allow = false;
            bool keep  = false;
            bool save  = false;
            DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None;

            if (decision.Allow)
            {
                allow = true;
            }

            if (decision.KeepMessage)
            {
                keep = true;
            }

            if (decision.SaveMessage)
            {
                save = true;
            }

            if (decision.SendAcknowledge == DeliveryAcknowledgeDecision.Always)
            {
                ack = DeliveryAcknowledgeDecision.Always;
            }

            else if (decision.SendAcknowledge == DeliveryAcknowledgeDecision.IfSaved && final.SendAcknowledge == DeliveryAcknowledgeDecision.None)
            {
                ack = DeliveryAcknowledgeDecision.IfSaved;
            }

            return(new Decision(allow, save, keep, ack));
        }
示例#3
0
 /// <summary>
 /// Creates new decision with full parameters
 /// </summary>
 public Decision(bool allow, bool save, bool keep, DeliveryAcknowledgeDecision sendAcknowledge)
 {
     Allow = allow;
     SaveMessage = save;
     KeepMessage = keep;
     SendAcknowledge = sendAcknowledge;
 }
示例#4
0
 /// <summary>
 /// Creates new decision without keeping messages and acknowledge
 /// </summary>
 public Decision(bool allow, bool save)
 {
     Allow = allow;
     SaveMessage = save;
     KeepMessage = false;
     SendAcknowledge = DeliveryAcknowledgeDecision.None;
 }
示例#5
0
文件: Decision.cs 项目: ciker/twino
 /// <summary>
 /// Creates new decision with full parameters
 /// </summary>
 public Decision(bool allow, bool save, bool keep, DeliveryAcknowledgeDecision sendAcknowledge, QueueAcknowledgeDeliveryHandler acknowledgeDelivery)
 {
     Allow               = allow;
     SaveMessage         = save;
     KeepMessage         = keep;
     SendAcknowledge     = sendAcknowledge;
     AcknowledgeDelivery = acknowledgeDelivery;
 }
示例#6
0
 /// <summary>
 /// Creates new decision with full parameters
 /// </summary>
 public Decision(bool allow, bool save, PutBackDecision putBack, DeliveryAcknowledgeDecision ack, QueueAcknowledgeDeliveryHandler acknowledgeDelivery)
 {
     Allow               = allow;
     SaveMessage         = save;
     PutBack             = putBack;
     Acknowledge         = ack;
     AcknowledgeDelivery = acknowledgeDelivery;
 }
示例#7
0
 /// <summary>
 /// Creates new decision with full parameters
 /// </summary>
 public Decision(bool allow, bool save, PutBackDecision putBack, DeliveryAcknowledgeDecision ack)
 {
     Allow               = allow;
     SaveMessage         = save;
     PutBack             = putBack;
     Acknowledge         = ack;
     AcknowledgeDelivery = null;
 }
示例#8
0
 /// <summary>
 /// Creates new decision without keeping messages and acknowledge
 /// </summary>
 public Decision(bool allow, bool save)
 {
     Allow               = allow;
     SaveMessage         = save;
     PutBack             = PutBackDecision.No;
     Acknowledge         = DeliveryAcknowledgeDecision.None;
     AcknowledgeDelivery = null;
 }
示例#9
0
        /// <inheritdoc />
        public virtual Task <Decision> AcknowledgeTimedOut(HorseQueue queue, MessageDelivery delivery)
        {
            DeliveryAcknowledgeDecision ack = ProducerAckDecision == ProducerAckDecision.AfterConsumerAckReceived
                                                  ? DeliveryAcknowledgeDecision.Negative
                                                  : DeliveryAcknowledgeDecision.None;

            return(Task.FromResult(new Decision(true, false, AckTimeoutPutBack, ack)));
        }
示例#10
0
        /// <inheritdoc />
        public virtual Task <Decision> ReceivedFromProducer(HorseQueue queue, QueueMessage message, MqClient sender)
        {
            DeliveryAcknowledgeDecision save = DeliveryAcknowledgeDecision.None;

            if (ProducerAckDecision == ProducerAckDecision.AfterReceived)
            {
                save = DeliveryAcknowledgeDecision.Always;
            }
            else if (ProducerAckDecision == ProducerAckDecision.AfterSaved)
            {
                save = DeliveryAcknowledgeDecision.IfSaved;
            }

            return(Task.FromResult(new Decision(true, true, PutBackDecision.No, save)));
        }
示例#11
0
        /// <inheritdoc />
        public virtual async Task <Decision> AcknowledgeReceived(HorseQueue queue, HorseMessage acknowledgeMessage, MessageDelivery delivery, bool success)
        {
            if (success && DeleteWhen == DeleteWhen.AfterAcknowledgeReceived)
            {
                await DeleteMessage(delivery.Message.Message.MessageId);
            }

            DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None;

            if (ProducerAckDecision == ProducerAckDecision.AfterConsumerAckReceived)
            {
                ack = success ? DeliveryAcknowledgeDecision.Always : DeliveryAcknowledgeDecision.Negative;
            }

            PutBackDecision putBack = success ? PutBackDecision.No : NegativeAckPutBack;

            return(new Decision(true, false, putBack, ack));
        }
示例#12
0
        /// <summary>
        /// Decision: Allow.
        /// If AcknowledgeWhen is AfterAcknowledge, acknowledge is sent to producer.
        /// </summary>
        public async Task <Decision> AcknowledgeReceived(HorseQueue queue, HorseMessage acknowledgeMessage, MessageDelivery delivery, bool success)
        {
            DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None;

            if (_producerAck == AcknowledgeWhen.AfterAcknowledge)
            {
                ack = success ? DeliveryAcknowledgeDecision.Always : DeliveryAcknowledgeDecision.Negative;
            }

            PutBackDecision putBack = PutBackDecision.No;

            if (!success)
            {
                putBack = _consumerAckFail;
            }

            return(await Task.FromResult(new Decision(true, false, putBack, ack)));
        }