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); }
/// <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()); }
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")); }
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); }
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()); }
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); }