public void NestedMessages()
        {
            string xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><msg><name>Fred</name><address><number>17</number><line1>Our House</line1><line2>In the middle of our street</line2><phone>1234</phone><local /></address></msg>";

            var reader = new FudgeXmlStreamReader(context, xml);
            var writer = new FudgeMsgStreamWriter();

            new FudgeStreamPipe(reader, writer).Process();

            var msg = writer.DequeueMessage();

            Assert.Equal("Our House", msg.GetMessage("address").GetString("line1"));

            // Convert back to XML and see if it matches
            var sb        = new StringBuilder();
            var xmlWriter = XmlWriter.Create(sb);
            var reader2   = new FudgeMsgStreamReader(context, msg);
            var writer2   = new FudgeXmlStreamWriter(context, xmlWriter, "msg")
            {
                AutoFlushOnMessageEnd = true
            };

            new FudgeStreamPipe(reader2, writer2).Process();

            var xml2 = sb.ToString();

            Assert.Equal(xml, xml2);
        }
예제 #2
0
        /// <summary>
        /// Convenience method to serializae an object graph to a list of <see cref="FudgeMsg"/> objects.
        /// </summary>
        /// <param name="graph">Starting point for graph of objects to serialize.</param>
        /// <returns>List of FudgeMsg objects containing the serialized state.</returns>
        public FudgeMsg SerializeToMsg(object graph)
        {
            var writer = new FudgeMsgStreamWriter(context);

            Serialize(writer, graph);
            return(writer.DequeueMessage());
        }
예제 #3
0
        public void RaisesEventAfterEachMessage()
        {
            var context  = new FudgeContext();
            var messages = new FudgeMsg[]
            {
                new FudgeMsg(context, new Field("test", "data")),
                new FudgeMsg(context, new Field("life", 42))
            };
            var reader = new FudgeMsgStreamReader(context, messages);
            var writer = new FudgeMsgStreamWriter(context);

            var pipe = new FudgeStreamPipe(reader, writer);

            int count = 0;

            pipe.MessageProcessed += () =>
            {
                var message = writer.DequeueMessage();
                FudgeUtils.AssertAllFieldsMatch(messages[count], message);
                count++;
            };

            pipe.Process();

            Assert.Equal(2, count);
        }
        public void MultipleMessages()
        {
            string json   = @"{""name"" : ""fred""} {""number"" : 17}";
            var    reader = new FudgeJSONStreamReader(context, json);
            var    writer = new FudgeMsgStreamWriter();

            new FudgeStreamPipe(reader, writer).Process();

            Assert.Equal(2, writer.PeekAllMessages().Count);
            Assert.Equal("fred", writer.DequeueMessage().GetString("name"));
            Assert.Equal(17, writer.DequeueMessage().GetInt("number"));
        }
예제 #5
0
        public void BigMessage()
        {
            var context = new FudgeContext();

            var msg    = StandardFudgeMessages.CreateLargeMessage(context);
            var reader = new FudgeMsgStreamReader(context, msg);
            var writer = new FudgeMsgStreamWriter();

            var pipe = new FudgeStreamPipe(reader, writer);

            pipe.Process();

            var newMsg = writer.DequeueMessage();

            FudgeUtils.AssertAllFieldsMatch(msg, newMsg);
        }
예제 #6
0
        public void MultipleMessages()
        {
            var context = new FudgeContext();

            var msg1   = StandardFudgeMessages.CreateMessageWithSubMsgs(context);
            var msg2   = StandardFudgeMessages.CreateMessageAllNames(context);
            var reader = new FudgeMsgStreamReader(context, new FudgeMsg[] { msg1, msg2 });
            var writer = new FudgeMsgStreamWriter();

            var pipe = new FudgeStreamPipe(reader, writer);

            pipe.Process();

            Assert.Equal(2, writer.PeekAllMessages().Count);
            FudgeUtils.AssertAllFieldsMatch(msg1, writer.DequeueMessage());
            FudgeUtils.AssertAllFieldsMatch(msg2, writer.DequeueMessage());
        }
예제 #7
0
        private static FudgeMsg ReadOneSubmessage(OpenGammaFudgeContext context, IFudgeStreamReader reader)
        {
            var writer = new FudgeMsgStreamWriter(context);

            writer.StartMessage();

            int depth = 1;

            while (reader.HasNext)
            {
                switch (reader.MoveNext())
                {
                case FudgeStreamElement.MessageStart:
                    throw new ArgumentException();

                case FudgeStreamElement.MessageEnd:
                    throw new ArgumentException();

                case FudgeStreamElement.SimpleField:
                    writer.WriteField(reader.FieldName, reader.FieldOrdinal, reader.FieldType, reader.FieldValue);
                    break;

                case FudgeStreamElement.SubmessageFieldStart:
                    depth++;
                    writer.StartSubMessage(reader.FieldName, reader.FieldOrdinal);
                    break;

                case FudgeStreamElement.SubmessageFieldEnd:
                    depth--;
                    if (depth == 0)
                    {
                        writer.EndMessage();
                        return(writer.DequeueMessage());
                    }
                    writer.EndSubMessage();
                    break;

                default:
                    break;          // Unknown
                }
            }

            throw new ArgumentException();
        }
 public ReaderFudgeDeserializationContext(FudgeContext context, SerializationTypeMap typeMap, IFudgeStreamReader reader, IFudgeTypeMappingStrategy typeMappingStrategy)
     : base(context, typeMap, typeMappingStrategy)
 {
     this.msgWriter = new FudgeMsgStreamWriter(context);
     this.pipe      = new FudgeStreamPipe(reader, msgWriter);
 }