internal ClassDefinition ReadClassDefinition(int handle)
        {
            ClassDefinition classDefinition = null;
            //an inline object
            bool inlineClassDef = ((handle & 1) != 0); handle = handle >> 1;

            if (inlineClassDef)
            {
                //inline class-def
                string typeIdentifier = ReadAMF3String();
                //flags that identify the way the object is serialized/deserialized
                bool externalizable = ((handle & 1) != 0); handle = handle >> 1;
                bool dynamic        = ((handle & 1) != 0); handle = handle >> 1;

                ClassMember[] members = new ClassMember[handle];
                for (int i = 0; i < handle; i++)
                {
                    string      name        = ReadAMF3String();
                    ClassMember classMember = new ClassMember(name, BindingFlags.Default, MemberTypes.Custom, null);
                    members[i] = classMember;
                }
                classDefinition = new ClassDefinition(typeIdentifier, members, externalizable, dynamic);
                AddClassReference(classDefinition);
            }
            else
            {
                //A reference to a previously passed class-def
                classDefinition = ReadClassReference(handle);
            }

            return(classDefinition);
        }
Esempio n. 2
0
 public ClassDefinition GetClassDefinition(object instance)
 {
     if (instance is ASObject)
     {
         ClassDefinition classDefinition;
         ASObject        aso = instance as ASObject;
         if (aso.IsTypedObject)
         {
             ClassMember[] classMemberList = new ClassMember[aso.Count];
             int           i = 0;
             foreach (KeyValuePair <string, object> entry in aso)
             {
                 ClassMember classMember = new ClassMember(entry.Key, BindingFlags.Default, MemberTypes.Custom, null);
                 classMemberList[i] = classMember;
                 i++;
             }
             string customClassName = aso.TypeName;
             classDefinition = new ClassDefinition(customClassName, classMemberList, false, false);
         }
         else
         {
             string customClassName = string.Empty;
             classDefinition = new ClassDefinition(customClassName, ClassDefinition.EmptyClassMembers, false, true);
         }
         return(classDefinition);
     }
     throw new ArgumentException();
 }
Esempio n. 3
0
        public override ClassDefinition GetClassDefinition(object instance)
        {
            Type         type        = instance.GetType();
            BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance;

            PropertyInfo[] propertyInfos = type.GetProperties(bindingAttr);

            List <ClassMember> classMemberList = new List <ClassMember>();

            for (int i = 0; i < propertyInfos.Length; i++)
            {
                PropertyInfo propertyInfo = propertyInfos[i];
                if (propertyInfo.Name != "HelpLink" && propertyInfo.Name != "TargetSite")
                {
                    ClassMember classMember = new ClassMember(propertyInfo.Name, bindingAttr, propertyInfo.MemberType, null);
                    classMemberList.Add(classMember);
                }
            }
            string customClassName = ObjectFactory.GetCustomClass(type);

            ClassMember[] classMembers = classMemberList.ToArray();

            ClassDefinition classDefinition = new ClassDefinition(customClassName, classMembers, GetIsExternalizable(instance), GetIsDynamic(instance));

            return(classDefinition);
        }
Esempio n. 4
0
 public void SetValue(object instance, ClassMember member, object value)
 {
     if (instance is ASObject)
     {
         ASObject aso = instance as ASObject;
         aso[member.Name] = value;
     }
     throw new ArgumentException();
 }
Esempio n. 5
0
        public object GetValue(object instance, ClassMember member)
        {
            if (instance is ASObject)
            {
                ASObject aso = instance as ASObject;
                if (aso.ContainsKey(member.Name))
                {
                    return(aso[member.Name]);
                }
                string msg = string.Format("ASObject[{0}]", member.Name);

                throw new MissingMemberException(msg);
            }
            throw new ArgumentException();
        }
Esempio n. 6
0
        public virtual void SetValue(object instance, ClassMember member, object value)
        {
            Type type = instance.GetType();

            if (member.MemberType == MemberTypes.Property)
            {
                PropertyInfo propertyInfo = type.GetProperty(member.Name, member.BindingFlags);
                propertyInfo.SetValue(instance, value, null);
            }
            if (member.MemberType == MemberTypes.Field)
            {
                FieldInfo fieldInfo = type.GetField(member.Name, member.BindingFlags);
                fieldInfo.SetValue(instance, value);
            }
            string msg = string.Format("{0}.{1}", type.FullName, member.Name);

            throw new MissingMemberException(msg);
        }
Esempio n. 7
0
        public virtual object GetValue(object instance, ClassMember member)
        {
            Type type = instance.GetType();

            if (member.MemberType == MemberTypes.Property)
            {
                PropertyInfo propertyInfo = type.GetProperty(member.Name, member.BindingFlags);
                object       value        = propertyInfo.GetValue(instance, null);
                value = HandleAttributes(instance, propertyInfo, value, member.CustomAttributes);
                return(value);
            }
            if (member.MemberType == MemberTypes.Field)
            {
                FieldInfo fieldInfo = type.GetField(member.Name, member.BindingFlags);
                object    value     = fieldInfo.GetValue(instance);
                value = HandleAttributes(instance, fieldInfo, value, member.CustomAttributes);
                return(value);
            }
            string msg = string.Format("{0}.{1}", type.FullName, member.Name);

            throw new MissingMemberException(msg);
        }
 public void SetValue(object instance, ClassMember member, object value)
 {
     throw new NotSupportedException();
 }
 public object GetValue(object instance, ClassMember member)
 {
     throw new NotSupportedException();
 }
Esempio n. 10
0
        public virtual ClassDefinition GetClassDefinition(object instance)
        {
            Type type = instance.GetType();

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("Creating class definition for typed {0}", type.FullName);
            sb.Append("{");

            List <string>      memberNames     = new List <string>();
            List <ClassMember> classMemberList = new List <ClassMember>();

            PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            for (int i = 0; i < propertyInfos.Length; i++)
            {
                PropertyInfo propertyInfo = propertyInfos[i];
                string       name         = propertyInfo.Name;

                if (propertyInfo.GetGetMethod() == null || propertyInfo.GetSetMethod() == null || propertyInfo.GetGetMethod().GetParameters().Length > 0)
                {
                    //The gateway will not be able to access this property
                    continue;
                }
                if (memberNames.Contains(name))
                {
                    continue;
                }
                memberNames.Add(name);
                BindingFlags bf = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
                try
                {
                    PropertyInfo propertyInfoTmp = type.GetProperty(name);
                    Unreferenced.Parameter(propertyInfoTmp);
                }
                catch (AmbiguousMatchException)
                {
                    bf = BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance;
                }
                object[]    attributes  = propertyInfo.GetCustomAttributes(false);
                ClassMember classMember = new ClassMember(name, bf, propertyInfo.MemberType, attributes);
                classMemberList.Add(classMember);

                if (i != 0)
                {
                    sb.Append(", ");
                }
                sb.Append(name);
            }
            FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
            for (int i = 0; i < fieldInfos.Length; i++)
            {
                FieldInfo fieldInfo = fieldInfos[i];

                if (fieldInfo.GetCustomAttributes(typeof(NonSerializedAttribute), true).Length > 0)
                {
                    continue;
                }
                string      name        = fieldInfo.Name;
                object[]    attributes  = fieldInfo.GetCustomAttributes(false);
                ClassMember classMember = new ClassMember(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, fieldInfo.MemberType, attributes);
                classMemberList.Add(classMember);

                if (i != 0 && propertyInfos.Length > 0)
                {
                    sb.Append(", ");
                }
                sb.Append(name);
            }
            ClassMember[]   classMembers    = classMemberList.ToArray();
            string          customClassName = ObjectFactory.GetCustomClass(type);
            ClassDefinition classDefinition = new ClassDefinition(customClassName, classMembers, GetIsExternalizable(instance), GetIsDynamic(instance));

            return(classDefinition);
        }
Esempio n. 11
0
        private object ReadAMF3Object(AMFReader reader, IConfigVODB configVodb)
        {
            int  handle = reader.ReadAMF3IntegerData();
            bool inline = ((handle & 1) != 0); handle = handle >> 1;

            if (!inline)
            {
                //An object reference
                return(reader.ReadAMF3ObjectReference(handle));
            }

            bool inlineClassDef = ((handle & 1) != 0); handle = handle >> 1;

            if (inlineClassDef)
            {
                //inline class-def
                string typeIdentifier = reader.ReadAMF3String();
                //flags that identify the way the object is serialized/deserialized
                bool externalizable = ((handle & 1) != 0);
                handle = handle >> 1;
                bool dynamic = ((handle & 1) != 0);
                handle = handle >> 1;
                ClassMember[] members = null;
                if (handle > 0)
                {
                    members = new ClassMember[handle];
                    for (int i = 0; i < handle; i++)
                    {
                        string      name        = reader.ReadAMF3String();
                        ClassMember classMember = new ClassMember(name, BindingFlags.Default, MemberTypes.Custom, null);
                        members[i] = classMember;
                    }
                }
                classDefinition = new ClassDefinition(typeIdentifier, members, externalizable, dynamic);
                reader.AddClassReference(classDefinition);
            }
            else
            {
                classDefinition = reader.ReadClassReference(handle);
            }

            object instance = configVodb.dbInstanceCreater();

            reader.AddAMF3ObjectReference(instance);

            for (int i = 0; i < classDefinition.MemberCount; i++)
            {
                string key = classDefinition.Members[i].Name;

                object value = reader.ReadAMF3Data();
                reader.SetMember(instance, key, value);
            }

            if (classDefinition.IsDynamic)
            {
                string key = reader.ReadAMF3String();
                object value;
                while (key != null && key != string.Empty)
                {
                    value = reader.ReadAMF3Data();

                    if (fieldInfosDic.TryGetValue(key, out fieldInfo))
                    {
                        configVodb.instanceFieldBind(instance, fieldInfo, value);
                    }
                    else if (fieldInfosDic.TryGetValue("__" + key, out fieldInfo))
                    {
                        configVodb.instanceFieldBind(instance, fieldInfo, value);
                    }
                    else
                    {
                        configVodb.instanceFieldBind(instance, key, value);
                    }
                    key = reader.ReadAMF3String();
                }
            }

            return(instance);
        }