Exemple #1
0
 protected static void WriteAmf(Stream stm, object obj)
 {
     if (obj == null)
     {
         stm.WriteByte((byte)DataType.Null);
     }
     else if (obj is byte || obj is int || obj is uint || obj is float || obj is double)
     {
         stm.WriteByte((byte)DataType.Number);
         CDataHelper.BE_WriteDouble(stm, double.Parse(obj.ToString()));
     }
     else if (obj is bool)
     {
         stm.WriteByte((byte)DataType.Boolean);
         stm.WriteByte((byte)((bool)obj ? 1 : 0));
     }
     else if (obj is string)
     {
         string str = obj as string;
         int    len = Encoding.UTF8.GetByteCount(str);
         if (len > 0xffff)
         {
             stm.WriteByte((byte)DataType.LongString);
             CDataHelper.BE_WriteLongStr(stm, str);
         }
         else
         {
             stm.WriteByte((byte)DataType.String);
             CDataHelper.BE_WriteShortStr(stm, str);
         }
     }
     else if (obj is Array)
     {
         stm.WriteByte((byte)DataType.Array);
         Array ary = obj as Array;
         CDataHelper.BE_WriteUInt32(stm, (uint)ary.Length);
         foreach (object o in ary)
         {
             WriteAmf(stm, o);
         }
     }
     else if (obj is IDictionary)
     {
         stm.WriteByte((byte)DataType.Object);
         foreach (DictionaryEntry e in obj as IDictionary)
         {
             CDataHelper.BE_WriteShortStr(stm, e.Key.ToString());
             WriteAmf(stm, e.Value);
         }
         CDataHelper.BE_WriteShortStr(stm, "");  // write only a short(0)
         stm.WriteByte((byte)DataType.EndOfObject);
     }
     else
     {
         stm.WriteByte((byte)DataType.Unsupported);
     }
 }