Пример #1
0
        public void WriteData(AMFWriter writer, object data)
        {
            if (data is ArrayCollection)
            {
                writer.WriteByte(AMF3TypeCode.Object);

                writer.WriteAMF3Object(data);
            }
            else if (data is IList)
            {
                writer.WriteByte(AMF3TypeCode.Array);

                writer.WriteAMF3Array((IList)data);
            }
            else if (data is IDictionary)
            {
                writer.WriteByte(AMF3TypeCode.Array);

                writer.WriteAMF3AssociativeArray((IDictionary)data);
            }
            else
            {
                writer.WriteByte(AMF3TypeCode.Object);

                writer.WriteAMF3Object(data);
            }
        }
Пример #2
0
        public void WriteData(AMFWriter writer, object data)
        {
            if (data is ArrayCollection)
            {
                writer.WriteByte(AMF3TypeCode.Object);
                writer.WriteAMF3Object(data);
                return;
            }
            //TODO: configure somehow Vector support

            /*
             * if (CollectionUtils.IsGenericListType(data.GetType()))
             * {
             *  Type itemType = ReflectionUtils.GetListItemType(data.GetType());
             *  switch (Type.GetTypeCode(itemType))
             *  {
             *      case TypeCode.Int32:
             *          writer.WriteByte(AMF3TypeCode.IntVector);
             *          writer.WriteAMF3IntVector(data as IList<int>);
             *          return;
             *      case TypeCode.UInt32:
             *          writer.WriteByte(AMF3TypeCode.UIntVector);
             *          writer.WriteAMF3UIntVector(data as IList<uint>);
             *          return;
             *      case TypeCode.Double:
             *          writer.WriteByte(AMF3TypeCode.NumberVector);
             *          writer.WriteAMF3DoubleVector(data as IList<double>);
             *          return;
             *      case TypeCode.String:
             *          writer.WriteByte(AMF3TypeCode.ObjectVector);
             *          writer.WriteAMF3ObjectVector(data as IList<string>);
             *          return;
             *      case TypeCode.Boolean:
             *          writer.WriteByte(AMF3TypeCode.ObjectVector);
             *          writer.WriteAMF3ObjectVector(data as IList<bool>);
             *          return;
             *      default:
             *          writer.WriteByte(AMF3TypeCode.ObjectVector);
             *          writer.WriteAMF3ObjectVector(data as IList);
             *          return;
             *  }
             * }
             */
            var list = data as IList;

            if (list != null)
            {
                //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001104.html#270405
                //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001105.html#268711
                if (writer.UseLegacyCollection)
                {
                    writer.WriteByte(AMF3TypeCode.Array);
                    writer.WriteAMF3Array(list);
                }
                else
                {
                    writer.WriteByte(AMF3TypeCode.Object);
                    object value = new ArrayCollection(list);
                    writer.WriteAMF3Object(value);
                }
                return;
            }
#if !(SILVERLIGHT)
            var listSource = data as IListSource;
            if (listSource != null)
            {
                if (writer.UseLegacyCollection)
                {
                    writer.WriteByte(AMF3TypeCode.Array);
                    writer.WriteAMF3Array(listSource.GetList());
                }
                else
                {
                    writer.WriteByte(AMF3TypeCode.Object);
                    object value = new ArrayCollection(listSource.GetList());
                    writer.WriteAMF3Object(value);
                }
                return;
            }
#endif
            var dictionary = data as IDictionary;
            if (dictionary != null)
            {
                //writer.WriteByte(AMF3TypeCode.Object);
                //writer.WriteAMF3Object(data);
                writer.WriteByte(AMF3TypeCode.Array);
                writer.WriteAMF3AssociativeArray(dictionary);
                return;
            }
            if (data is Exception)
            {
                writer.WriteByte(AMF3TypeCode.Object);
                if (writer.UseLegacyThrowable)
                {
                    writer.WriteAMF3Object(new ASExceptionObject(data as Exception));
                }
                else
                {
                    writer.WriteAMF3Object(data);
                }
                return;
            }
            if (data is IExternalizable)
            {
                writer.WriteByte(AMF3TypeCode.Object);
                writer.WriteAMF3Object(data);
                return;
            }
            if (data is IEnumerable)
            {
                var enumerator = (data as IEnumerable).GetEnumerator();
#if !(NET_1_1)
                var tmp = new List <object>();
#else
                ArrayList tmp = new ArrayList();
#endif
                foreach (var element in (data as IEnumerable))
                {
                    tmp.Add(element);
                }
                if (writer.UseLegacyCollection)
                {
                    writer.WriteByte(AMF3TypeCode.Array);
                    writer.WriteAMF3Array(tmp);
                }
                else
                {
                    writer.WriteByte(AMF3TypeCode.Object);
                    object value = new ArrayCollection(tmp);
                    writer.WriteAMF3Object(value);
                }
                return;
            }
            writer.WriteByte(AMF3TypeCode.Object);
            writer.WriteAMF3Object(data);
        }
Пример #3
0
 public void WriteData(AMFWriter writer, object data)
 {
     if (data is ArrayCollection)
     {
         writer.WriteByte(AMF3TypeCode.Object);
         writer.WriteAMF3Object(data);
         return;
     }
     //TODO: configure somehow Vector support
     /*
     if (CollectionUtils.IsGenericListType(data.GetType()))
     {
         Type itemType = ReflectionUtils.GetListItemType(data.GetType());
         switch (Type.GetTypeCode(itemType))
         {
             case TypeCode.Int32:
                 writer.WriteByte(AMF3TypeCode.IntVector);
                 writer.WriteAMF3IntVector(data as IList<int>);
                 return;
             case TypeCode.UInt32:
                 writer.WriteByte(AMF3TypeCode.UIntVector);
                 writer.WriteAMF3UIntVector(data as IList<uint>);
                 return;
             case TypeCode.Double:
                 writer.WriteByte(AMF3TypeCode.NumberVector);
                 writer.WriteAMF3DoubleVector(data as IList<double>);
                 return;
             case TypeCode.String:
                 writer.WriteByte(AMF3TypeCode.ObjectVector);
                 writer.WriteAMF3ObjectVector(data as IList<string>);
                 return;
             case TypeCode.Boolean:
                 writer.WriteByte(AMF3TypeCode.ObjectVector);
                 writer.WriteAMF3ObjectVector(data as IList<bool>);
                 return;
             default:
                 writer.WriteByte(AMF3TypeCode.ObjectVector);
                 writer.WriteAMF3ObjectVector(data as IList);
                 return;
         }
     }
     */
     var list = data as IList;
     if (list != null )
     {
         //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001104.html#270405
         //http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001105.html#268711
         if( writer.UseLegacyCollection )
         {
             writer.WriteByte(AMF3TypeCode.Array);
             writer.WriteAMF3Array(list);
         }
         else
         {
             writer.WriteByte(AMF3TypeCode.Object);
             object value = new ArrayCollection(list);
             writer.WriteAMF3Object(value);
         }
         return;
     }
     #if !(SILVERLIGHT)
     var listSource = data as IListSource;
     if (listSource != null)
     {
         if (writer.UseLegacyCollection)
         {
             writer.WriteByte(AMF3TypeCode.Array);
             writer.WriteAMF3Array(listSource.GetList());
         }
         else
         {
             writer.WriteByte(AMF3TypeCode.Object);
             object value = new ArrayCollection(listSource.GetList());
             writer.WriteAMF3Object(value);
         }
         return;
     }
     #endif
     var dictionary = data as IDictionary;
     if (dictionary != null)
     {
         //writer.WriteByte(AMF3TypeCode.Object);
         //writer.WriteAMF3Object(data);
         writer.WriteByte(AMF3TypeCode.Array);
         writer.WriteAMF3AssociativeArray(dictionary);
         return;
     }
     if(data is Exception)
     {
         writer.WriteByte(AMF3TypeCode.Object);
         if (writer.UseLegacyThrowable)
             writer.WriteAMF3Object(new ASExceptionObject(data as Exception) );
         else
             writer.WriteAMF3Object(data);
         return;
     }
     if( data is IExternalizable )
     {
         writer.WriteByte(AMF3TypeCode.Object);
         writer.WriteAMF3Object(data);
         return;
     }
     if (data is IEnumerable)
     {
         var enumerator = (data as IEnumerable).GetEnumerator();
     #if !(NET_1_1)
         var tmp = new List<object>();
     #else
         ArrayList tmp = new ArrayList();
     #endif
         foreach (var element in (data as IEnumerable))
         {
             tmp.Add(element);
         }
         if (writer.UseLegacyCollection)
         {
             writer.WriteByte(AMF3TypeCode.Array);
             writer.WriteAMF3Array(tmp);
         }
         else
         {
             writer.WriteByte(AMF3TypeCode.Object);
             object value = new ArrayCollection(tmp);
             writer.WriteAMF3Object(value);
         }
         return;
     }
     writer.WriteByte(AMF3TypeCode.Object);
     writer.WriteAMF3Object(data);
 }