/// <summary> /// Maps the specified map. /// </summary> /// <typeparam name="TNew">The type of the t new.</typeparam> /// <param name="map">The map.</param> /// <returns>HeaderResult<TNew>.</returns> public HeaderResult <TNew> Map <TNew>(Func <TResult, HeaderResult <TNew> > map) { if (Success) { return(map(Result)); } return(HeaderResult <TNew> .Empty()); }
public Message CreateMessage(BasicDeliverEventArgs fromQueue) { var headers = fromQueue.BasicProperties.Headers ?? new Dictionary <string, object>(); var topic = HeaderResult <string> .Empty(); var messageId = HeaderResult <Guid> .Empty(); var timeStamp = HeaderResult <DateTime> .Empty(); var handledCount = HeaderResult <int> .Empty(); var delayedMilliseconds = HeaderResult <int> .Empty(); Message message; try { topic = ReadTopic(fromQueue, headers); messageId = ReadMessageId(fromQueue.BasicProperties.MessageId); timeStamp = ReadTimeStamp(fromQueue.BasicProperties); handledCount = ReadHandledCount(headers); delayedMilliseconds = ReadDelayedMilliseconds(headers); var messageType = ReadMessageType(headers); if (false == (topic.Success && messageId.Success && messageType.Success && timeStamp.Success && handledCount.Success)) { message = FailureMessage(topic, messageId); } else { var messageHeader = timeStamp.Success ? new MessageHeader(messageId.Result, topic.Result, messageType.Result, timeStamp.Result, handledCount.Result, delayedMilliseconds.Result) : new MessageHeader(messageId.Result, topic.Result, messageType.Result); message = new Message(messageHeader, new MessageBody(fromQueue.Body, fromQueue.BasicProperties.Type)); headers.Each(header => message.Header.Bag.Add(header.Key, ParseHeaderValue(header.Value))); } } catch (Exception e) { _logger.Value.WarnException("Failed to create message from amqp message", e); message = FailureMessage(topic, messageId); } if (headers.ContainsKey(HeaderNames.CORRELATION_ID)) { var correlationId = Encoding.UTF8.GetString((byte[])headers[HeaderNames.CORRELATION_ID]); message.Header.CorrelationId = Guid.Parse(correlationId); } message.SetDeliveryTag(fromQueue.DeliveryTag); return(message); }
public Message CreateMessage(BasicDeliverEventArgs fromQueue) { var headers = fromQueue.BasicProperties.Headers ?? new Dictionary <string, object>(); var topic = HeaderResult <string> .Empty(); var messageId = HeaderResult <Guid> .Empty(); var timeStamp = HeaderResult <DateTime> .Empty(); var handledCount = HeaderResult <int> .Empty(); var delayedMilliseconds = HeaderResult <int> .Empty(); var redelivered = HeaderResult <bool> .Empty(); var deliveryTag = HeaderResult <ulong> .Empty(); var messageType = HeaderResult <MessageType> .Empty(); var replyTo = HeaderResult <string> .Empty(); var deliveryMode = fromQueue.BasicProperties.DeliveryMode; Message message; try { topic = ReadTopic(fromQueue, headers); messageId = ReadMessageId(fromQueue.BasicProperties.MessageId); timeStamp = ReadTimeStamp(fromQueue.BasicProperties); handledCount = ReadHandledCount(headers); delayedMilliseconds = ReadDelayedMilliseconds(headers); redelivered = ReadRedeliveredFlag(fromQueue.Redelivered); deliveryTag = ReadDeliveryTag(fromQueue.DeliveryTag); messageType = ReadMessageType(headers); replyTo = ReadReplyTo(fromQueue.BasicProperties); if (false == (topic.Success && messageId.Success && messageType.Success && timeStamp.Success && handledCount.Success)) { message = FailureMessage(topic, messageId); } else { var messageHeader = timeStamp.Success ? new MessageHeader(messageId.Result, topic.Result, messageType.Result, timeStamp.Result, handledCount.Result, delayedMilliseconds.Result) : new MessageHeader(messageId.Result, topic.Result, messageType.Result); //this effectively transfers ownership of our buffer message = new Message(messageHeader, new MessageBody(fromQueue.Body, fromQueue.BasicProperties.Type)); headers.Each(header => message.Header.Bag.Add(header.Key, ParseHeaderValue(header.Value))); } if (headers.ContainsKey(HeaderNames.CORRELATION_ID)) { var correlationId = Encoding.UTF8.GetString((byte[])headers[HeaderNames.CORRELATION_ID]); message.Header.CorrelationId = Guid.Parse(correlationId); } message.DeliveryTag = deliveryTag.Result; message.Redelivered = redelivered.Result; message.Header.ReplyTo = replyTo.Result; message.Persist = deliveryMode == 2; } catch (Exception e) { s_logger.LogWarning(e, "Failed to create message from amqp message"); message = FailureMessage(topic, messageId); } return(message); }