示例#1
0
        next()
        {
            message_wrapper rv = null;

            amqp_msg = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
            if (amqp_msg.Body.Length != 0)
            {
                MemoryStream stream = new MemoryStream(amqp_msg.Body);
                var          proto  = new TCompactProtocol(new TStreamTransport(stream, stream));

                int  delta_stream_id = (int)proto.ReadI32();
                bool read_in_delta_mode;
                if (delta_stream_id < 0)
                {
                    read_in_delta_mode = false;
                    delta_stream_id    = -delta_stream_id;
                }
                else
                {
                    read_in_delta_mode = true;
                }

                uint type_id = (uint)proto.ReadI32();

                Dictionary <uint, Dictionary <int, message_wrapper> > old_subject = null;
                if (!previous_messages.TryGetValue(amqp_msg.RoutingKey, out old_subject))
                {
                    var deltas = new Dictionary <int, message_wrapper>();
                    deltas[delta_stream_id] = new message_wrapper(message_factory.from_type_id(type_id));
                    old_subject             = new Dictionary <uint, Dictionary <int, message_wrapper> >();
                    old_subject[type_id]    = deltas;
                    previous_messages[amqp_msg.RoutingKey] = old_subject;
                }

                Dictionary <int, message_wrapper> old_type_id = null;
                if (!old_subject.TryGetValue(type_id, out old_type_id))
                {
                    var deltas = new Dictionary <int, message_wrapper>();
                    deltas[delta_stream_id] = new message_wrapper(message_factory.from_type_id(type_id));
                    old_subject[type_id]    = deltas;
                }

                if (!old_type_id.TryGetValue(delta_stream_id, out rv))
                {
                    old_type_id[delta_stream_id] = rv = new message_wrapper(message_factory.from_type_id(type_id));
                }

                rv.msg.read_in_delta_mode = read_in_delta_mode;

                if (rv.non_delta_seen == false && read_in_delta_mode == false)
                {
                    rv.non_delta_seen = true;
                }

                rv.msg.Read(proto);
            }
            return(rv);
        }
示例#2
0
        next()
        {
            message_wrapper rv = null;

            amqp_msg = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
            if (amqp_msg.Body.Length != 0)
            {
                MemoryStream stream = new MemoryStream(amqp_msg.Body);

                var bytes = new byte[4];
                stream.Read(bytes, 0, 4);
                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(bytes);
                }
                uint type_id = (uint)BitConverter.ToInt32(bytes, 0);

                var tmp           = message_factory.from_type_id(type_id);
                var xmlSerializer = new XmlSerializer(tmp.GetType());
                rv = new message_wrapper((message_base)xmlSerializer.Deserialize(stream));
            }
            return(rv);
        }