Exemple #1
0
        public void WriteDefaultObjectForType(Type type)
        {
            // get serializer
            IAmf3Serializer serializer = GetSerializerForType(type);
            // create default instance
            var defaultInstance = serializer.NewInstance(null);

            // write object using serializer
            serializer.WriteObject(this, defaultInstance);
        }
Exemple #2
0
        public object ReadAmf3Object()
        {
            Amf3Object.Flags flags = (Amf3Object.Flags)ReadInteger();

            if ((flags & Amf3Object.Flags.Inline) == 0)
            {
                return(GetTableEntry(objectTable, ((int)flags) >> 1));
            }

            Amf3ClassDef classDef;

            if ((flags & Amf3Object.Flags.InlineClassDef) == 0)
            {
                classDef = GetTableEntry(traitTable, ((int)flags) >> 2);
            }
            else
            {
                classDef = ReadAmf3ClassDef(flags);
            }

            // get the serializer to use (start with the override serializer)
            IAmf3Serializer serializer = OverrideSerializer;

            if (serializer == null)
            {
                // no override? get serializer from class definition
                serializer = classDef.Serializer;
                if (serializer == null)
                {
                    // no serializer for class definition? use default serializer
                    serializer = DefaultSerializer;
                }
            }

            // fast path the Amf3Object serializer
            if (serializer is Amf3Object.Serializer)
            {
                var obj = new Amf3Object(classDef);

                // add to object table
                objectTable.Add(obj);

                // read all properties into object
                int count = classDef.Properties.Length;
                for (int i = 0; i < count; i++)
                {
                    ReadNextObject(ref obj.Values[i]);
                }

                // read dynamic properties
                if (classDef.Dynamic)
                {
                    string key = ReadString();
                    while (key != "")
                    {
                        var value = ReadNextObject();
                        obj.SetPropertyValueAsObject(key, value);
                        key = ReadString();
                    }
                }
                return(obj);
            }
            else
            {
                // create object instance using serializer
                object obj = serializer.NewInstance(classDef);

                // add to object table
                objectTable.Add(obj);

                // begin property remapping
                var reader = classDef.CreatePropertyReader();
                reader.BeginRead(this);
                // read object using serializer
                serializer.ReadObject(reader, obj);
                // end property remapping
                classDef.ReleasePropertyReader(reader);

                // read dynamic properties
                if (classDef.Dynamic)
                {
                    var    dc  = obj as PlayScript.IDynamicClass;
                    string key = ReadString();
                    while (key != "")
                    {
                        var value = ReadNextObject();
                        if (dc != null)
                        {
                            dc.__SetDynamicValue(key, value);
                        }
                        key = ReadString();
                    }
                }
                return(obj);
            }
        }