示例#1
0
        public static Message MessageFromEnvelopes(CFXEnvelope [] envelopes, CFXCodec codec = CFXCodec.raw)
        {
            if (envelopes.Length == 1)
            {
                return(MessageFromEnvelope(envelopes.First(), codec));
            }

            List <CFXEnvelope> container = new List <CFXEnvelope>(envelopes);

            byte[] msgData = Encoding.UTF8.GetBytes(CFXJsonSerializer.SerializeObject(container));
            msgData = Encode(msgData, codec);

            Message msg = new Message(msgData);

            msg.Properties = new Amqp.Framing.Properties
            {
                MessageId    = Guid.NewGuid().ToString(),
                CreationTime = DateTime.Now,
                ContentType  = "application/json; charset=\"utf-8\""
            };

            if (codec == CFXCodec.gzip)
            {
                msg.Properties.ContentEncoding = "gzip";
            }

            msg.Header = new Amqp.Framing.Header()
            {
                Durable = AmqpCFXEndpoint.DurableMessages.Value
            };

            return(msg);
        }
示例#2
0
        /// <summary>
        /// Converts multiple CFXEnvelope(s) into a single AMQP message
        /// </summary>
        /// <param name="envelopes">An array of CFX envelopes containing CFX messages</param>
        /// <param name="codec">The CODEC to be used</param>
        /// <param name="subjectFormat">The subject format to be applied.  If null, default is used.</param>
        /// <returns>An AMQP message</returns>
        public static Message MessageFromEnvelopes(CFXEnvelope [] envelopes, CFXCodec codec = CFXCodec.raw, string subjectFormat = null)
        {
            if (envelopes.Length < 1)
            {
                return(null);
            }
            else if (envelopes.Length == 1)
            {
                return(MessageFromEnvelope(envelopes.First(), codec, subjectFormat));
            }

            CFXEnvelope        env       = envelopes.First();
            List <CFXEnvelope> container = new List <CFXEnvelope>(envelopes);

            byte[] msgData = Encoding.UTF8.GetBytes(CFXJsonSerializer.SerializeObject(container));
            msgData = Encode(msgData, codec);

            Message msg = new Message();

            msg.BodySection = new Data()
            {
                Binary = msgData
            };
            SetHeaders(msg, env, codec, subjectFormat);

            return(msg);
        }
示例#3
0
        public static Message MessageFromEnvelopes(CFXEnvelope [] envelopes, bool compressed = false)
        {
            if (envelopes.Length == 1)
            {
                return(MessageFromEnvelope(envelopes.First()));
            }

            List <CFXEnvelope> container = new List <CFXEnvelope>(envelopes);

            byte[] msgData = Encoding.UTF8.GetBytes(CFXJsonSerializer.SerializeObject(container));
            if (compressed)
            {
                msgData = Compress(msgData);
            }

            Message msg = new Message(msgData);

            msg.Properties = new Amqp.Framing.Properties
            {
                MessageId    = Guid.NewGuid().ToString(),
                CreationTime = DateTime.Now
            };

            if (compressed)
            {
                msg.Properties.ContentEncoding = "CFX-COMPRESSED";
            }

            return(msg);
        }
示例#4
0
        public static CFXEnvelope FromJson(string jsonData)
        {
            CFXEnvelope env = CFXJsonSerializer.DeserializeObject <CFXEnvelope>(jsonData);
            Type        tp  = Type.GetType(env.MessageName);

            env.MessageBody = CFXJsonSerializer.DeserializeObject(env.MessageBody.ToString(), tp);
            return(env);
        }
示例#5
0
        public static List <CFXEnvelope> FromJsonList(string jsonData)
        {
            List <CFXEnvelope> list = CFXJsonSerializer.DeserializeObject <List <CFXEnvelope> >(jsonData);

            foreach (CFXEnvelope env in list)
            {
                Type tp = Type.GetType(env.MessageName);
                env.MessageBody = CFXJsonSerializer.DeserializeObject(env.MessageBody.ToString(), tp);
            }

            return(list);
        }
示例#6
0
        public static CFXEnvelope FromJson(string jsonData)
        {
            CFXEnvelope env = CFXJsonSerializer.DeserializeObject <CFXEnvelope>(jsonData);

            // For backwards compatibility.  Older versions of the SDK did not properly decorate the $type of the MessageBody property,
            // so the message portion had to be deserialized individually, which was inefficient.
            if (!(env.MessageBody is CFXMessage))
            {
                Type tp = Type.GetType(env.MessageName);
                env.MessageBody = CFXJsonSerializer.DeserializeObject(env.MessageBody.ToString(), tp);
            }

            return(env);
        }
示例#7
0
        public static List <CFXEnvelope> FromJsonList(string jsonData)
        {
            List <CFXEnvelope> list = CFXJsonSerializer.DeserializeObject <List <CFXEnvelope> >(jsonData);

            foreach (CFXEnvelope env in list)
            {
                // For backwards compatibility.  Older versions of the SDK did not properly decorate the $type of the MessageBody property,
                // so the message portion had to be deserialized individually, which was inefficient.
                if (!(env.MessageBody is CFXMessage) && !string.IsNullOrWhiteSpace(env.messageName))
                {
                    Type tp = Type.GetType(env.messageName);
                    env.MessageBody = CFXJsonSerializer.DeserializeObject(env.MessageBody.ToString(), tp);
                }
            }

            return(list);
        }
示例#8
0
 public string ToJson(bool formatted = false)
 {
     return(CFXJsonSerializer.SerializeObject(this, formatted));
 }
示例#9
0
 public string ToJson()
 {
     return(CFXJsonSerializer.SerializeObject(this));
 }
示例#10
0
 public static T FromBytes <T>(byte [] data) where T : CFXMessage
 {
     return(CFXJsonSerializer.DeserializeObject <T>(Encoding.UTF8.GetString(data)));
 }
示例#11
0
 public byte[] ToBytes()
 {
     return(Encoding.UTF8.GetBytes(CFXJsonSerializer.SerializeObject(this)));
 }
示例#12
0
 public static T FromJson <T>(string jsonData) where T : CFXMessage
 {
     return(CFXJsonSerializer.DeserializeObject <T>(jsonData));
 }