コード例 #1
0
ファイル: HorseMessage.cs プロジェクト: erkantaylan/horse-mq
        /// <summary>
        /// Clones the message
        /// </summary>
        public HorseMessage Clone(bool cloneHeaders, bool cloneContent, string cloneId, List <KeyValuePair <string, string> > additionalHeaders = null)
        {
            HorseMessage clone = new HorseMessage(Type, Target);

            if (!string.IsNullOrEmpty(cloneId))
            {
                clone.SetMessageId(cloneId);
            }

            clone.SetSource(Source);

            clone.HighPriority = HighPriority;
            clone.WaitResponse = WaitResponse;
            clone.ContentType  = ContentType;

            if (cloneHeaders && HasHeader)
            {
                clone.HasHeader   = true;
                clone.HeadersList = new List <KeyValuePair <string, string> >(HeadersList);
            }

            if (additionalHeaders != null && additionalHeaders.Count > 0)
            {
                if (!clone.HasHeader)
                {
                    clone.HasHeader   = true;
                    clone.HeadersList = new List <KeyValuePair <string, string> >(additionalHeaders);
                }
                else
                {
                    clone.HeadersList.AddRange(additionalHeaders);
                }
            }

            if (cloneContent && Content != null && Content.Length > 0)
            {
                Content.Position = 0;
                clone.Content    = new MemoryStream();
                Content.WriteTo(clone.Content);
                clone.Length = Convert.ToUInt64(clone.Content.Length);
            }

            return(clone);
        }
コード例 #2
0
ファイル: HorseMessage.cs プロジェクト: erkantaylan/horse-mq
        /// <summary>
        /// Create an acknowledge message of the message
        /// </summary>
        public HorseMessage CreateAcknowledge(string negativeReason = null)
        {
            HorseMessage message = new HorseMessage();

            message.SetMessageId(MessageId);
            message.Type = MessageType.Response;

            if (Type == MessageType.DirectMessage)
            {
                message.HighPriority = true;
                message.SetSource(Target);
                message.SetTarget(Source);
            }
            else
            {
                message.HighPriority = false;
                //target will be queue name
                message.SetTarget(Target);
            }

            if (!string.IsNullOrEmpty(negativeReason))
            {
                message.ContentType = KnownContentTypes.Failed;
                if (!message.HasHeader)
                {
                    message.HasHeader = true;
                }

                if (message.HeadersList == null)
                {
                    message.HeadersList = new List <KeyValuePair <string, string> >();
                }

                message.HeadersList.Add(new KeyValuePair <string, string>(HorseHeaders.NEGATIVE_ACKNOWLEDGE_REASON, negativeReason));
            }
            else
            {
                message.ContentType = Convert.ToUInt16(HorseResultCode.Ok);
            }

            return(message);
        }