Beispiel #1
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            var structType = value.GetType();
            writer.Type(structType, defaultItemType);

            var rule = ByteUtils.GetRule(structType);
            if (rule != null)
            {
                rule.OnWriteInternal(writer, value);
            }
            else
            {
                var fields = usedFields.GetUnical(structType);
                if (fields == null)
                    fields = ByteUtils.GetSerializeFields(structType);

                writer.Ushort((ushort)fields.Length);
                for (int i = 0; i < fields.Length; i++)
                {
                    var field = fields[i];
                    writer.String(field.Name);
                    writer.Complex(field.GetValue(value), null);
                }
            }
        }
Beispiel #2
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            var itemType = value.GetType().GetElementType();
            var array = ((Array)value);

            writer.Type(itemType, defaultItemType);
            writer.Int(array.Length);
            for (int i = 0; i < array.Length; i++)
                writer.Complex(array.GetValue(i), itemType);
        }
Beispiel #3
0
 private void DimensionalWriteResoursy(ByteObjectWriter writer, Array array, Type itemType, int dimensional, int[] indexes)
 {
     for (int i = 0; i < array.GetLength(dimensional); i++)
     {
         indexes[dimensional] = i;
         if (dimensional < array.Rank - 1)
             DimensionalWriteResoursy(writer, array, itemType, dimensional + 1, indexes);
         else
         {
             writer.Complex(array.GetValue(indexes), itemType);
         }
     }
 }
Beispiel #4
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            var itemType = value.GetType().GetElementType();
            var array = ((Array)value);

            writer.Type(itemType, defaultItemType);
            writer.Int(array.Rank);
            for (int i = 0; i < array.Rank; i++)
                writer.Int(array.GetLength(i));

            var indexes = new int[array.Rank];
            DimensionalWriteResoursy(writer, array, itemType, 0, indexes);
        }
Beispiel #5
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            //Сохраняем данные в хеше, получаем объект который:
            //Если данные отсутствовали в хеше - возвращает текущую позицию
            //Если данные были в хеше - возвращает позицию, которая была при сохранении
            var objData = writer.SaveToClassHashtable(value);
            if (objData.definitionPosition == writer.position)
            {
                writer.Byte(IsDefinition);

                var classType = value.GetType();
                writer.Type(classType, defaultItemType);

                var rule = ByteUtils.GetRule(classType);
                if (rule != null)
                {
                    rule.OnWriteInternal(writer, value);
                }
                else
                {
                    var fields = usedFields.GetUnical(classType);
                    if (fields == null)
                        fields = ByteUtils.GetSerializeFields(classType);

                    writer.Ushort((ushort)fields.Length);
                    for (int i = 0; i < fields.Length; i++)
                    {
                        var field = fields[i];
                        writer.String(field.Name);
                        writer.Complex(field.GetValue(value), null);
                    }
                }
            }
            else
            {
                writer.Byte(IsGoto);
                writer.Int(objData.definitionPosition);
            }
        }
Beispiel #6
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.String((string)value);
 }
Beispiel #7
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Short((short)value);
 }
Beispiel #8
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Double((double)value);
 }
Beispiel #9
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Bool((bool)value);
 }
Beispiel #10
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     var unityObj = (UnityEngine.Object)value;
     writer.unityHashtable[unityObj.GetInstanceID()] = unityObj;
     writer.Int(unityObj.GetInstanceID());
 }
Beispiel #11
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
 }
Beispiel #12
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Float((float)value);
 }
Beispiel #13
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Char((char)value);
 }