コード例 #1
0
        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());
        }
コード例 #2
0
        public void VerySimpleExample()
        {
            // This code is used as the example in the NamespaceDoc for Fudge.Serialization

            // Create a context and a serializer
            var context    = new FudgeContext();
            var serializer = new FudgeSerializer(context);

            // Our object to serialize
            var temperatureRange = new TemperatureRange {
                High = 28.3, Low = 13.2, Average = 19.6
            };

            // Serialize it to a MemoryStream
            var stream       = new MemoryStream();
            var streamWriter = new FudgeEncodedStreamWriter(context, stream);

            serializer.Serialize(streamWriter, temperatureRange);

            // Reset the stream and deserialize a new object from it
            stream.Position = 0;
            var streamReader = new FudgeEncodedStreamReader(context, stream);
            var range2       = (TemperatureRange)serializer.Deserialize(streamReader);

            // Just check a value matches
            Assert.Equal(temperatureRange, range2);
        }
コード例 #3
0
ファイル: Proxy.cs プロジェクト: vazapple/OG-DotNet
        public static void CycleInputToOutput(string typeHint)
        {
            var openGammaFudgeContext = new OpenGammaFudgeContext();
            var fudgeSerializer       = openGammaFudgeContext.GetSerializer();

            using (var openStandardInput = Console.OpenStandardInput())
                using (var openStandardOutput = Console.OpenStandardOutput())
                {
                    var fudgeEncodedStreamWriter = new FudgeEncodedStreamWriter(openGammaFudgeContext, openStandardOutput);
                    var fudgeEncodedStreamReader = new FudgeEncodedStreamReader(openGammaFudgeContext, openStandardInput);

                    var mappingStrategy = (IFudgeTypeMappingStrategy)openGammaFudgeContext.GetProperty(ContextProperties.TypeMappingStrategyProperty);

                    var mappedtype = mappingStrategy.GetType(typeHint) ?? typeof(object);

                    var hintType = typeof(TestWrapper <>).MakeGenericType(mappedtype);

                    var wrapper = (ITestWrapper)Deserialize(fudgeSerializer, hintType, fudgeEncodedStreamReader);

                    object hydratedObject = wrapper.TestObject;
                    CheckEqualityIfAppropriate(hydratedObject, mappedtype);

                    fudgeSerializer.Serialize(fudgeEncodedStreamWriter, wrapper);

                    openStandardOutput.Flush();
                }
        }
コード例 #4
0
 /// <summary>
 /// Encodes a <c>FudgeMsg</c> object to a <c>Stream</c> with an optional taxonomy reference.
 /// If a taxonomy is supplied it may be used to optimize the output by writing ordinals instead
 /// of field names.
 /// </summary>
 /// <param name="msg">the <c>FudgeMessage</c> to write</param>
 /// <param name="taxonomyId">the identifier of the taxonomy to use. Specify <c>null</c> for no taxonomy</param>
 /// <param name="bw">The <see cref="BinaryWriter"/> to serialise to</param>
 public void Serialize(FudgeMsg msg, short?taxonomyId, BinaryWriter bw)
 {
     try
     {
         var writer = new FudgeEncodedStreamWriter(this);
         writer.TaxonomyId = taxonomyId;
         writer.Reset(bw);
         writer.StartMessage();
         writer.WriteFields(msg.GetAllFields());
         writer.EndMessage();
     }
     catch (IOException e)
     {
         throw new FudgeRuntimeException("Unable to write Fudge message to OutputStream", e);
     }
 }
コード例 #5
0
        public void RecursiveDataType_TypeReferences()
        {
            //
            var context    = new FudgeContext();
            var serializer = new FudgeSerializer(context);


            var obj = new RecursiveDataType
            {
                Text             = "SomeString",
                TemperatureRange = new TemperatureRange {
                    Low = 18, High = 24, Average = 21
                },
                Inner = new RecursiveDataType
                {
                    Text             = "SomeOtherString",
                    TemperatureRange = new TemperatureRange {
                        Low = 5, High = 15, Average = 10
                    },
                    Inner = new RecursiveDataType
                    {
                        Text             = "AnotherString",
                        TemperatureRange = new TemperatureRange {
                            Low = 35, High = 40, Average = 37.5
                        },
                        Inner = new RecursiveDataType()
                    }
                }
            };

            // Serialize it to a MemoryStream
            var stream       = new MemoryStream();
            var streamWriter = new FudgeEncodedStreamWriter(context, stream);

            serializer.Serialize(streamWriter, obj);

            // Reset the stream and deserialize a new object from it
            stream.Position = 0;
            var streamReader = new FudgeEncodedStreamReader(context, stream);
            var cycledObj    = (RecursiveDataType)serializer.Deserialize(streamReader);

            // Just check a value matches
            Assert.Equal(obj, cycledObj);
        }