public void CheckElementsCorrectForSubMessage() { var context = new FudgeContext(); var msg = context.NewMessage(); var subMsg = context.NewMessage(); msg.Add("sub", subMsg); subMsg.Add("Test", "Bob"); var bytes = context.ToByteArray(msg); var stream = new MemoryStream(bytes); var reader = new FudgeEncodedStreamReader(context, stream); Assert.True(reader.HasNext); Assert.Equal(FudgeStreamElement.MessageStart, reader.MoveNext()); Assert.True(reader.HasNext); Assert.Equal(FudgeStreamElement.SubmessageFieldStart, reader.MoveNext()); Assert.True(reader.HasNext); Assert.Equal(FudgeStreamElement.SimpleField, reader.MoveNext()); Assert.True(reader.HasNext); Assert.Equal(FudgeStreamElement.SubmessageFieldEnd, reader.MoveNext()); Assert.True(reader.HasNext); Assert.Equal(FudgeStreamElement.MessageEnd, reader.MoveNext()); Assert.False(reader.HasNext); }
public void MultipleMessages() { // Same as CheckElementsCorrectForSimpleMessage but without using HasNext var context = new FudgeContext(); var msg1 = context.NewMessage(); msg1.Add("Test", "Bob"); var msg2 = context.NewMessage(); msg2.Add("Test2", "Shirley"); var msgs = new FudgeMsg[] { msg1, msg2 }; var stream = new MemoryStream(); var writer = new FudgeEncodedStreamWriter(context, stream); new FudgeStreamPipe(new FudgeMsgStreamReader(context, msgs), writer).Process(); stream.Position = 0; var reader = new FudgeEncodedStreamReader(context, stream); Assert.Equal(FudgeStreamElement.MessageStart, reader.MoveNext()); Assert.Equal(FudgeStreamElement.SimpleField, reader.MoveNext()); Assert.Equal(FudgeStreamElement.MessageEnd, reader.MoveNext()); Assert.Equal(FudgeStreamElement.MessageStart, reader.MoveNext()); Assert.Equal(FudgeStreamElement.SimpleField, reader.MoveNext()); Assert.Equal(FudgeStreamElement.MessageEnd, reader.MoveNext()); Assert.Equal(FudgeStreamElement.NoElement, reader.MoveNext()); Assert.Equal(FudgeStreamElement.NoElement, reader.MoveNext()); }
public void CheckEndOfStreamWithoutHasNext() { // Same as CheckElementsCorrectForSimpleMessage but without using HasNext var context = new FudgeContext(); var msg = context.NewMessage(); msg.Add("Test", "Bob"); var bytes = context.ToByteArray(msg); var stream = new MemoryStream(bytes); var reader = new FudgeEncodedStreamReader(context, stream); Assert.Equal(FudgeStreamElement.MessageStart, reader.MoveNext()); Assert.Equal(FudgeStreamElement.SimpleField, reader.MoveNext()); Assert.Equal(FudgeStreamElement.MessageEnd, reader.MoveNext()); Assert.Equal(FudgeStreamElement.NoElement, reader.MoveNext()); Assert.Equal(FudgeStreamElement.NoElement, reader.MoveNext()); }
/// <summary> /// Parses data from a given <see cref="BinaryReader"/>. /// </summary> /// <param name="binaryReader"></param> /// <returns></returns> public FudgeMsgEnvelope Parse(BinaryReader binaryReader) { FudgeEncodedStreamReader reader = new FudgeEncodedStreamReader(FudgeContext); reader.Reset(binaryReader); FudgeStreamElement element = reader.MoveNext(); if (element == FudgeStreamElement.NoElement) { return(null); } if (element != FudgeStreamElement.MessageStart) { throw new ArgumentException("First element in encoding stream wasn't a message element."); } int version = reader.SchemaVersion; FudgeMsg msg = FudgeContext.NewMessage(); FudgeMsgEnvelope envelope = new FudgeMsgEnvelope(msg, version); ProcessFields(reader, msg); return(envelope); }