private Message Convert()

in rocketmq-client-csharp/ClientManager.cs [222:286]


        private Message Convert(string sourceHost, rmq::Message message)
        {
            var msg = new Message();
            msg.Topic = message.Topic.Name;
            msg.MessageId = message.SystemProperties.MessageId;
            msg.Tag = message.SystemProperties.Tag;

            // Validate message body checksum
            byte[] raw = message.Body.ToByteArray();
            if (rmq::DigestType.Crc32 == message.SystemProperties.BodyDigest.Type)
            {
                uint checksum = Force.Crc32.Crc32Algorithm.Compute(raw, 0, raw.Length);
                if (!message.SystemProperties.BodyDigest.Checksum.Equals(checksum.ToString("X")))
                {
                    msg._checksumVerifiedOk = false;
                }
            }
            else if (rmq::DigestType.Md5 == message.SystemProperties.BodyDigest.Type)
            {
                var checksum = MD5.HashData(raw);
                if (!message.SystemProperties.BodyDigest.Checksum.Equals(System.Convert.ToHexString(checksum)))
                {
                    msg._checksumVerifiedOk = false;
                }
            }
            else if (rmq::DigestType.Sha1 == message.SystemProperties.BodyDigest.Type)
            {
                var checksum = SHA1.HashData(raw);
                if (!message.SystemProperties.BodyDigest.Checksum.Equals(System.Convert.ToHexString(checksum)))
                {
                    msg._checksumVerifiedOk = false;
                }
            }

            foreach (var entry in message.UserProperties)
            {
                msg.UserProperties.Add(entry.Key, entry.Value);
            }

            msg._receiptHandle = message.SystemProperties.ReceiptHandle;
            msg._sourceHost = sourceHost;

            foreach (var key in message.SystemProperties.Keys)
            {
                msg.Keys.Add(key);
            }

            msg.DeliveryAttempt = message.SystemProperties.DeliveryAttempt;

            if (message.SystemProperties.BodyEncoding == rmq::Encoding.Gzip)
            {
                // Decompress/Inflate message body
                var inputStream = new MemoryStream(message.Body.ToByteArray());
                var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress);
                var outputStream = new MemoryStream();
                gzipStream.CopyTo(outputStream);
                msg.Body = outputStream.ToArray();
            }
            else
            {
                msg.Body = message.Body.ToByteArray();
            }

            return msg;
        }