Пример #1
0
        public override object OnRead(ByteObjectReader reader, Type defaultItemType)
        {
            var structType = reader.Type(defaultItemType);
            var rule = ByteUtils.GetRule(structType);
            if (rule != null)
                return rule.OnReadInternal(reader);

            var obj = Activator.CreateInstance(structType); //todo

            var fields = usedFields.GetUnical(structType);
            if (fields == null)
                fields = ByteUtils.GetSerializeFields(structType);

            var fieldCount = reader.Ushort();
            for (int i = 0; i < fieldCount; i++)
            {
                var fieldName = reader.String();
                var value = reader.Complex(null);
                var field = fields.FirstOrDefault(x => x.Name == fieldName);
                if (field != null)
                {
                    field.SetValue(obj, value);
                }
            }
            return obj;
        }
Пример #2
0
 public override object OnRead(ByteObjectReader reader, Type defaultItemType)
 {
     var itemType = reader.Type(defaultItemType);
     var length = reader.Int();
     var array = Array.CreateInstance(itemType, length);
     for (int i = 0; i < length; i++)
     {
         var item = reader.Complex(itemType);
         array.SetValue(item, i);
     }
     return array;
 }
Пример #3
0
        public override object OnRead(ByteObjectReader reader, Type defaultItemType)
        {
            var itemType = reader.Type(defaultItemType);
            var rank = reader.Int();

            var lengths = new int[rank];
            for (int i = 0; i < rank; i++)
                lengths[i] = reader.Int();

            var array = Array.CreateInstance(itemType, lengths);
            var indexes = new int[rank];
            DimensionalReadResoursy(reader, array, itemType, 0, indexes);
            return array;
        }
Пример #4
0
 private void DimensionalReadResoursy(ByteObjectReader reader, 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)
             DimensionalReadResoursy(reader, array, itemType, dimensional + 1, indexes);
         else
         {
             var item = reader.Complex(itemType);
             array.SetValue(item, indexes);
         }
     }
 }
Пример #5
0
        public override object OnRead(ByteObjectReader reader, Type defaultItemType)
        {
            var type = reader.Byte();
            if (type == IsDefinition)
            {
                var handleIndex = reader.position - sizeof(byte);
                var classType = reader.Type(defaultItemType);
                var rule = ByteUtils.GetRule(classType);
                if (rule != null)
                {
                    return rule.OnReadInternal(reader);
                }
                else
                {
                    var obj = Activator.CreateInstance(classType); //todo
                    reader.classHashtable[handleIndex] = obj;

                    var fields = usedFields.GetUnical(classType);
                    if (fields == null)
                        fields = ByteUtils.GetSerializeFields(classType);

                    var fieldCount = reader.Ushort();
                    for (int i = 0; i < fieldCount; i++)
                    {
                        var fieldName = reader.String();
                        var value = reader.Complex(null);
                        var field = fields.FirstOrDefault(x => x.Name == fieldName);
                        if (field != null)
                        {
                            field.SetValue(obj, value);
                        }
                    }
                    return obj;
                }
            }
            if (type == IsGoto)
            {
                var handleIndex = reader.Int();
                return reader.classHashtable[handleIndex];
            }
            throw new Exception("Wtf?");
        }
Пример #6
0
 public override object OnRead(ByteObjectReader reader, Type defaultItemType)
 {
     return reader.String();
 }
Пример #7
0
 public override object OnRead(ByteObjectReader reader, Type defaultItemType)
 {
     var instanceId = reader.Int();
     var unityObj = reader.unityHashtable[instanceId];
     return unityObj;
 }
Пример #8
0
 public override object OnRead(ByteObjectReader reader, Type defaultItemType)
 {
     return null;
 }