Example #1
0
        public void WriteData(AMFWriter writer, object data)
        {
            IList list = data as IList;

            if (list != null)
            {
                writer.WriteByte(AMF3TypeCode.Array);
                writer.WriteAMF3Array(list);
                return;
            }

            IListSource listSource = data as IListSource;

            if (listSource != null)
            {
                writer.WriteByte(AMF3TypeCode.Array);
                writer.WriteAMF3Array(listSource.GetList());
                return;
            }

            IDictionary dictionary = data as IDictionary;

            if (dictionary != null)
            {
                writer.WriteByte(AMF3TypeCode.Dictionary);
                writer.WriteAMF3Dictionary(dictionary);
                return;
            }
            if (data is Exception)
            {
                writer.WriteByte(AMF3TypeCode.Object);
                writer.WriteAMF3Object(data);
                return;
            }
            if (data is IExternalizable)
            {
                writer.WriteByte(AMF3TypeCode.Object);
                writer.WriteAMF3Object(data);
                return;
            }
            if (data is IEnumerable)
            {
                ArrayList tmp = new ArrayList();
                foreach (object element in (data as IEnumerable))
                {
                    tmp.Add(element);
                }

                writer.WriteByte(AMF3TypeCode.Array);
                writer.WriteAMF3Array(tmp);

                return;
            }
            writer.WriteByte(AMF3TypeCode.Object);
            writer.WriteAMF3Object(data);
        }
        public void WriteData(AMFWriter writer, object data)
        {
            Type type = data.GetType().GetElementType();

            if (type == typeof(object))
            {
                writer.WriteByte(AMF3TypeCode.Array);
                writer.WriteAMF3Array(data as Array);
                return;
            }

            if (type == typeof(int))
            {
                writer.WriteByte(AMF3TypeCode.IntVector);

                IList      rawData = (IList)data;
                List <int> list    = new List <int>(rawData.Count);
                foreach (int item in rawData)
                {
                    list.Add(item);
                }

                writer.WriteAMF3IntVector(list, data is Array);
                return;
            }

            if (type == typeof(uint))
            {
                writer.WriteByte(AMF3TypeCode.UIntVector);

                IList       rawData = (IList)data;
                List <uint> list    = new List <uint>(rawData.Count);
                foreach (uint item in rawData)
                {
                    list.Add(item);
                }
                writer.WriteAMF3UIntVector(list, data is Array);
                return;
            }

            if (type == typeof(float))
            {
                writer.WriteByte(AMF3TypeCode.NumberVector);
                IList         rawData = (IList)data;
                List <double> list    = new List <double>(rawData.Count);
                foreach (float item in rawData)
                {
                    list.Add(Convert.ToDouble(item));
                }
                writer.WriteAMF3DoubleVector(list, data is Array);
                return;
            }

            if (type == typeof(double))
            {
                writer.WriteByte(AMF3TypeCode.NumberVector);
                IList         rawData = (IList)data;
                List <double> list    = new List <double>(rawData.Count);
                foreach (double item in rawData)
                {
                    list.Add(item);
                }
                writer.WriteAMF3DoubleVector(list, data is Array);
                return;
            }


            writer.WriteByte(AMF3TypeCode.ObjectVector);
            writer.WriteAMF3ObjectVector(data as IList);
        }