/// <summary> /// Sends HMQ message to client /// </summary> public virtual Task <bool> SendAsync(HorseMessage message, IList <KeyValuePair <string, string> > additionalHeaders = null) { if (UseUniqueMessageId && string.IsNullOrEmpty(message.MessageId)) { message.SetMessageId(_uniqueIdGenerator.Create()); } byte[] data = HmqWriter.Create(message, additionalHeaders); return(SendAsync(data)); }
/// <summary> /// Create a response message of the message /// </summary> public HorseMessage CreateResponse(HorseResultCode status) { HorseMessage message = new HorseMessage(); message.HighPriority = Type == MessageType.DirectMessage; message.Type = MessageType.Response; message.ContentType = Convert.ToUInt16(status); message.SetMessageId(MessageId); message.SetTarget(Type == MessageType.QueueMessage ? Target : Source); return(message); }
/// <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); }
/// <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); }