示例#1
0
        public void Compress(MessageCompression compressionType)
        {
            if (compressionType != MessageCompression.GZip)
            {
                throw new NotImplementedException("Only GZip compression is currently supported.");
            }

            Body = GZipCompress(Body);
            MessageCompression = compressionType;
        }
        /// <summary>
        /// Asynchronously sends the specified message.
        /// </summary>
        /// <param name="message">The message to send.</param>
        public Task SendAsync(ISenderMessage message)
        {
            var shouldCompress = message.ShouldCompress(_compressed);

            var stringValue = message.StringValue;

            if (shouldCompress)
            {
                stringValue = MessageCompression.Compress(stringValue);
            }

            var sendMessageRequest = new SendMessageRequest(_queueUrl, stringValue);

            var originatingSystemAlreadyExists = false;

            if (message.Headers != null)
            {
                foreach (var header in message.Headers)
                {
                    if (header.Key == HeaderName.OriginatingSystem)
                    {
                        originatingSystemAlreadyExists = true;
                    }

                    sendMessageRequest.MessageAttributes.Add(
                        header.Key,
                        new MessageAttributeValue {
                        StringValue = header.Value, DataType = "String"
                    });
                }
            }

            sendMessageRequest.MessageAttributes[HeaderName.MessageFormat] =
                new MessageAttributeValue {
                StringValue = message.MessageFormat.ToString(), DataType = "String"
            };

            if (!originatingSystemAlreadyExists)
            {
                sendMessageRequest.MessageAttributes[HeaderName.OriginatingSystem] =
                    new MessageAttributeValue {
                    StringValue = "SQS", DataType = "String"
                };
            }

            if (shouldCompress)
            {
                sendMessageRequest.MessageAttributes[HeaderName.CompressedPayload] =
                    new MessageAttributeValue {
                    StringValue = "true", DataType = "String"
                };
            }

            return(_sqs.SendMessageAsync(sendMessageRequest));
        }
示例#3
0
        /// <summary>
        /// Gets the string value of the message. The <paramref name="encoding"/> parameter
        /// is ignored.
        /// </summary>
        /// <param name="encoding">Ignored.</param>
        /// <returns>
        /// The string value of the message.
        /// </returns>
        public string GetStringValue(Encoding encoding)
        {
            var stringValue = RawStringValue;

            if (_namedPipeMessage.Headers.ContainsKey(HeaderName.CompressedPayload) &&
                _namedPipeMessage.Headers[HeaderName.CompressedPayload] == "true")
            {
                stringValue = MessageCompression.Decompress(stringValue);
            }

            return(stringValue);
        }
示例#4
0
        /// <summary>
        /// Gets the string value of the message.
        /// </summary>
        /// <param name="encoding">The encoding to use. Ignored.</param>
        /// <returns>The string value of the message.</returns>
        public string GetStringValue(Encoding encoding)
        {
            var stringValue = RawStringValue;

            if (_message.MessageAttributes.ContainsKey(HeaderName.CompressedPayload) &&
                _message.MessageAttributes[HeaderName.CompressedPayload].StringValue == "true")
            {
                stringValue = MessageCompression.Decompress(stringValue);
            }

            return(stringValue);
        }
示例#5
0
        public void Compress(MessageCompression compressionType)
        {
            if (compressionType != MessageCompression.GZip)
            {
                throw new NotImplementedException("Only GZip compression is currently supported.");
            }

            if (this.MessageCompression != MessageCompression.None)
            {
                throw new InvalidOperationException($"The message has already been compressed using {MessageCompression}");
            }

            Body = GZipCompress(Body);
            MessageCompression = compressionType;
        }
示例#6
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message to send.</param>
        public Task SendAsync(ISenderMessage message)
        {
            var shouldCompress = message.ShouldCompress(_compressed);

            var stringValue = shouldCompress
                ? MessageCompression.Compress(message.StringValue)
                : message.StringValue;

            var namedPipeMessage = new NamedPipeMessage
            {
                StringValue   = stringValue,
                MessageFormat = message.MessageFormat,
                Priority      = message.Priority,
                Headers       = new Dictionary <string, string>()
            };

            var originatingSystemAlreadyExists = false;

            foreach (var header in message.Headers)
            {
                if (header.Key == HeaderName.OriginatingSystem)
                {
                    originatingSystemAlreadyExists = true;
                }

                namedPipeMessage.Headers.Add(header.Key, header.Value);
            }

            namedPipeMessage.Headers[HeaderName.MessageFormat] = message.MessageFormat.ToString();

            if (!originatingSystemAlreadyExists)
            {
                namedPipeMessage.Headers[HeaderName.OriginatingSystem] = "NamedPipe";
            }

            if (shouldCompress)
            {
                namedPipeMessage.Headers[HeaderName.CompressedPayload] = "true";
            }

            var messageString = _serializer.SerializeToString(namedPipeMessage);

            _messages.Add(messageString);

            return(_completedTask);
        }