示例#1
0
        public static void SaveProgram(Stream s, SerializableFLProgram program, FLInstructionSet iset, string[] extraSteps,
                                       FLProgramHeader programHeader = null)
        {
            Byt3Serializer main = CreateLoader(iset);

            MemoryStream ms = new MemoryStream();

            if (!main.TryWritePacket(ms, program))
            {
                throw new FLDeserializationException("Can not parse stream");
            }

            if (programHeader == null)
            {
                programHeader = new FLProgramHeader("Program", "NONE", Version.Parse("0.0.0.1"));
            }

            FLHeader header = new FLHeader(FLVersions.HeaderVersion, FLVersions.SerializationVersion,
                                           FLVersions.CommonVersion, extraSteps);

            byte[] p = ms.ToArray();

            ms.Close();

            FLFileFormat file = new FLFileFormat(header, programHeader, p);

            if (!main.TryWritePacket(s, file))
            {
                throw new FLDeserializationException("Can not parse stream");
            }
        }
示例#2
0
        public void Serializer_ReadWrite_Test()
        {
            Packet p = new Packet(true);

            Byt3Serializer.AddSerializer <Packet>(new PacketSerializer());

            MemoryStream stream = new MemoryStream();
            bool         ret    = Byt3Serializer.TryWritePacket(stream, p);

            Assert.True(ret);
            stream.Position = 0;

            bool p2ret = Byt3Serializer.TryReadPacket <Packet>(stream, out Packet p2);

            Assert.True(p2ret);

            Assert.True(Math.Abs(p.valfloat - p2.valfloat) < 0.001f);
            Assert.True(Math.Abs(p.valdouble - p2.valdouble) < 0.001f);

            Assert.True(p.valint == p2.valint);
            Assert.True(p.valuint == p2.valuint);

            Assert.True(p.valshort == p2.valshort);
            Assert.True(p.valushort == p2.valushort);

            Assert.True(p.vallong == p2.vallong);
            Assert.True(p.valulong == p2.valulong);

            Assert.True(p.valstring == p2.valstring);

            for (int i = 0; i < p.valbytes.Length; i++)
            {
                Assert.True(p.valbytes[i] == p2.valbytes[i]);
            }
        }
 public SerializableFLProgramSerializer(Dictionary <Type, FLBaseSerializer> serializers, FLInstructionSet iset)
 {
     instructionSet   = iset;
     BufferSerializer = Byt3Serializer.GetDefaultSerializer();
     foreach (KeyValuePair <Type, FLBaseSerializer> keyValuePair in serializers)
     {
         BufferSerializer.AddSerializer(keyValuePair.Key, keyValuePair.Value);
     }
 }
示例#4
0
        public SerializableInstructionSerializer(Dictionary <Type, FLBaseSerializer> serializers)
        {
            argSerializer = Byt3Serializer.GetDefaultSerializer();
            serializer    = serializers;

            foreach (KeyValuePair <Type, FLBaseSerializer> keyValuePair in serializers)
            {
                argSerializer.AddSerializer(keyValuePair.Key, keyValuePair.Value);
            }
        }
示例#5
0
        private void Start()
        {
            Byt3Serializer.AddSerializer <ClientHeartBeatPacket>(new ClientHeartBeatSerializer());
            Byt3Serializer.AddSerializer <ClientHandshakePacket>(new ClientHandshakeSerializer());
            Byt3Serializer.AddSerializer <ClientInstanceReadyPacket>(new ClientInstanceReadySerializer());


            if (Info == null)
            {
                Info = new MasterServerInfo();
            }
        }
示例#6
0
        public static SerializableFLProgram LoadProgram(Stream s, FLInstructionSet iset)
        {
            Byt3Serializer main = CreateLoader(iset);

            if (!main.TryReadPacket(s, out FLFileFormat file))
            {
                throw new FLDeserializationException("Can not parse FL File Format");
            }

            MemoryStream programStream = new MemoryStream(file.Program);

            if (!main.TryReadPacket(programStream, out SerializableFLProgram program))
            {
                throw new FLDeserializationException("Program Data is Corrupt");
            }

            return(program);
        }
示例#7
0
        private static Byt3Serializer CreateLoader(FLInstructionSet iset)
        {
            SerializableBufferArgumentSerializer           bbuf           = new SerializableBufferArgumentSerializer();
            SerializableDecimalArgumentSerializer          debuf          = new SerializableDecimalArgumentSerializer();
            SerializableFunctionArgumentSerializer         fabuf          = new SerializableFunctionArgumentSerializer();
            SerializableExternalFunctionArgumentSerializer exbuf          = new SerializableExternalFunctionArgumentSerializer();
            Dictionary <Type, FLBaseSerializer>            argumentParser = new Dictionary <Type, FLBaseSerializer>
            {
                { typeof(SerializeBufferArgument), bbuf },
                { typeof(SerializeDecimalArgument), debuf },
                { typeof(SerializeFunctionArgument), fabuf },
                { typeof(SerializeExternalFunctionArgument), exbuf }
            };

            SerializableFLFunctionSerializer         efunc  = new SerializableFLFunctionSerializer(argumentParser);
            SerializableExternalFLFunctionSerializer exfunc = new SerializableExternalFLFunctionSerializer(iset);
            EmptyFLBufferSerializer         ebuf            = new EmptyFLBufferSerializer();
            RandomFLBufferSerializer        rbuf            = new RandomFLBufferSerializer();
            UnifiedRandomFLBufferSerializer urbuf           = new UnifiedRandomFLBufferSerializer();
            FromImageFLBufferSerializer     fibuf           = new FromImageFLBufferSerializer(true);
            WFCFLBufferSerializer           wfcbuf          = new WFCFLBufferSerializer();
            Dictionary <Type, Serializers.Internal.FLBaseSerializer> bufferParser = new Dictionary <Type, Serializers.Internal.FLBaseSerializer>
            {
                { typeof(SerializableExternalFLFunction), exfunc },
                { typeof(SerializableFLFunction), efunc },
                { typeof(SerializableEmptyFLBuffer), ebuf },
                { typeof(SerializableRandomFLBuffer), rbuf },
                { typeof(SerializableUnifiedRandomFLBuffer), urbuf },
                { typeof(SerializableFromFileFLBuffer), fibuf },
                { typeof(SerializableWaveFunctionCollapseFLBuffer), wfcbuf },
            };

            SerializableFLProgramSerializer prog = new SerializableFLProgramSerializer(bufferParser, iset);
            Byt3Serializer main = Byt3Serializer.GetDefaultSerializer();

            main.AddSerializer(typeof(SerializableFLProgram), prog);
            main.AddSerializer(typeof(FLFileFormat), new FLFileFormatSerializer());
            return(main);
        }
示例#8
0
        private static Byt3Serializer CreateLoader(FLInstructionSet iset)
        {
            SerializableBufferArgumentSerializer           bbuf  = new SerializableBufferArgumentSerializer();
            SerializableArrayArgumentSerializer            abuf  = new SerializableArrayArgumentSerializer();
            SerializableDecimalArgumentSerializer          debuf = new SerializableDecimalArgumentSerializer();
            SerializableFunctionArgumentSerializer         fabuf = new SerializableFunctionArgumentSerializer();
            SerializableExternalFunctionArgumentSerializer exbuf = new SerializableExternalFunctionArgumentSerializer();
            SerializableArrayLengthSerializer  arLen             = new SerializableArrayLengthSerializer();
            SerializableNameArgumentSerializer nArg = new SerializableNameArgumentSerializer();
            SerializableArrayElementArgumentVariableIndexSerializer arEVI =
                new SerializableArrayElementArgumentVariableIndexSerializer();
            SerializableArrayElementArgumentValueIndexSerializer arEVaI =
                new SerializableArrayElementArgumentValueIndexSerializer();
            SerializableArrayElementArgumentEnclosedIndexSerializer arEI =
                new SerializableArrayElementArgumentEnclosedIndexSerializer();
            Dictionary <Type, FLBaseSerializer> argumentParser = new Dictionary <Type, FLBaseSerializer>
            {
                { typeof(SerializeBufferArgument), bbuf },
                { typeof(SerializeArrayBufferArgument), abuf },
                { typeof(SerializeDecimalArgument), debuf },
                { typeof(SerializeFunctionArgument), fabuf },
                {
                    typeof(SerializeExternalFunctionArgument), exbuf
                },
                { typeof(SerializeArrayLengthArgument), arLen },
                { typeof(SerializeNameArgument), nArg },
                {
                    typeof(
                        SerializeArrayElementArgumentVariableIndex),
                    arEVI
                },
                {
                    typeof(SerializeArrayElementArgumentValueIndex),
                    arEVaI
                },
                {
                    typeof(
                        SerializeArrayElementArgumentEnclosedIndex),
                    arEI
                }
            };

            SerializableFLFunctionSerializer         efunc   = new SerializableFLFunctionSerializer(argumentParser);
            SerializableExternalFLFunctionSerializer exfunc  = new SerializableExternalFLFunctionSerializer(iset);
            EmptyFLBufferSerializer             ebuf         = new EmptyFLBufferSerializer();
            FromImageFLBufferSerializer         fibuf        = new FromImageFLBufferSerializer(true);
            Dictionary <Type, FLBaseSerializer> bufferParser =
                new Dictionary <Type, FLBaseSerializer>
            {
                { typeof(SerializableExternalFLFunction), exfunc },
                { typeof(SerializableFLFunction), efunc },
                { typeof(SerializableEmptyFLBuffer), ebuf },
                { typeof(SerializableFromFileFLBuffer), fibuf }
            };

            SerializableFLProgramSerializer prog = new SerializableFLProgramSerializer(bufferParser, iset);

            PluginManager.LoadPlugins(prog);
            Byt3Serializer main = Byt3Serializer.GetDefaultSerializer();

            main.AddSerializer(typeof(SerializableFLProgram), prog);
            main.AddSerializer(typeof(FLFileFormat), new FLFileFormatSerializer());
            return(main);
        }