示例#1
0
        public object Unpack(Packer packer)
        {
            var packerObject = new Packer.PackerObject();

            packerObject.meta = (Packer.Meta)packer.UnpackInternal();
            packerObject.data = (byte[])packer.UnpackInternal();

            return(packerObject);
        }
示例#2
0
        public object Unpack(Packer packer)
        {
            var meta = new Packer.Meta();

            meta.metaTypeId = 0;
            meta.meta       = new Dictionary <System.Type, Packer.MetaType>();

            var asms = System.AppDomain.CurrentDomain.GetAssemblies();
            var arr  = (Packer.MetaType[])packer.UnpackInternal();

            for (int i = 0; i < arr.Length; ++i)
            {
                var data = arr[i];
                for (int j = 0; j < asms.Length; ++j)
                {
                    var type = asms[j].GetType(data.type);
                    if (type != null)
                    {
                        meta.meta.Add(type, data);
                        break;
                    }
                }
            }

            return(meta);
        }
示例#3
0
        public object Unpack(Packer packer, System.Type rootType)
        {
            var instance = System.Activator.CreateInstance(rootType);
            var fields   = rootType.GetCachedFields();

            for (int i = 0; i < fields.Length; ++i)
            {
                var type = packer.ReadByte();
                if (type == (byte)TypeValue.Null)
                {
                    fields[i].SetValue(instance, null);
                    continue;
                }

                if (packer.serializers.TryGetValue(type, out var ser) == true)
                {
                    fields[i].SetValue(instance, ser.unpack.Invoke(packer));
                }
                else
                {
                    packer.UnpackInternal();
                }
            }

            return(instance);
        }
示例#4
0
        public object Unpack(Packer packer)
        {
            var length      = Int32Serializer.UnpackDirect(packer);
            var typeIdValue = Int32Serializer.UnpackDirect(packer);
            var typeValue   = packer.GetMetaType(typeIdValue);

            var type = packer.GetMetaType(Int32Serializer.UnpackDirect(packer));
            var t    = type.MakeGenericType(typeValue);

            var dict = (ME.ECS.Collections.IDictionaryInt)System.Activator.CreateInstance(t);

            for (int i = 0; i < length; ++i)
            {
                dict.Add(packer.UnpackInternal(), packer.UnpackInternal());
            }

            return(dict);
        }
示例#5
0
文件: Serializer.cs 项目: mmvlad/ecs
        public static Packer FromStream(Serializers serializers, System.IO.MemoryStream stream)
        {
            var packer       = new Packer(serializers, stream);
            var packerObject = (PackerObject)packer.UnpackInternal();

            packer.meta   = packerObject.meta;
            packer.stream = new System.IO.MemoryStream(packerObject.data);

            return(packer);
        }
示例#6
0
        public object Unpack(Packer packer)
        {
            var length = Int32Serializer.UnpackDirect(packer);
            var meta   = new Packer.MetaType[length];

            for (int i = 0; i < length; ++i)
            {
                meta[i] = packer.UnpackInternal <Packer.MetaType>();
            }

            return(meta);
        }
        public object Unpack(Packer packer)
        {
            var length = Int32Serializer.UnpackDirect(packer);

            var arr = new object[length];

            for (int i = 0; i < length; ++i)
            {
                arr[i] = packer.UnpackInternal();
            }

            return(arr);
        }
        public object Unpack(Packer packer)
        {
            var type         = packer.GetMetaType(Int32Serializer.UnpackDirect(packer));
            var typeValue    = packer.GetMetaType(Int32Serializer.UnpackDirect(packer));
            var typeProvider = packer.GetMetaType(Int32Serializer.UnpackDirect(packer));

            var sentinelType = type.MakeGenericType(typeValue, typeProvider);

            var poolClassType = typeof(PoolClass <>).MakeGenericType(sentinelType);
            var spawnMethod   = poolClassType.GetMethod("Spawn", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
            var sentinel      = (IDisposeSentinel)spawnMethod.Invoke(null, null);

            sentinel.SetData(packer.UnpackInternal());
            sentinel.SetTick(Int64Serializer.UnpackDirect(packer));

            return(sentinel);
        }
示例#9
0
        public void Unpack <T>(Packer packer, T objectToOverwrite) where T : class
        {
            var fields = typeof(T).GetCachedFields();

            for (int i = 0; i < fields.Length; ++i)
            {
                var type = packer.ReadByte();
                if (type == (byte)TypeValue.Null)
                {
                    fields[i].SetValue(objectToOverwrite, null);
                    continue;
                }

                if (packer.serializers.TryGetValue(type, out var ser) == true)
                {
                    fields[i].SetValue(objectToOverwrite, ser.unpack.Invoke(packer));
                }
                else
                {
                    packer.UnpackInternal();
                }
            }
        }
        public object Unpack(Packer packer)
        {
            var length  = Int32Serializer.UnpackDirect(packer);
            var isArray = packer.ReadByte();
            var typeId  = Int32Serializer.UnpackDirect(packer);
            var typeIn  = packer.GetMetaType(typeId);

            IList arr = null;

            if (isArray == 2)
            {
                var rank = Int32Serializer.UnpackDirect(packer);
                if (rank > 1)
                {
                    var lengthArray = new int[rank];
                    for (int j = 0; j < rank; ++j)
                    {
                        lengthArray[j] = Int32Serializer.UnpackDirect(packer);
                    }

                    var arrData = System.Array.CreateInstance(typeIn, lengthArray);
                    arr = arrData;

                    void WrapDimension(int[] ids, int currentDimension)
                    {
                        if (currentDimension == rank)
                        {
                            arrData.SetValue(packer.UnpackInternal(), ids);
                        }
                        else
                        {
                            for (int i = 0, len = arrData.GetLength(currentDimension); i < len; i++)
                            {
                                ids[currentDimension] = i;
                                WrapDimension(ids, currentDimension + 1);
                            }
                        }
                    }

                    WrapDimension(new int[rank], 0);
                }
            }
            else if (isArray == 1)
            {
                arr = System.Array.CreateInstance(typeIn, length);
                for (int i = 0; i < length; ++i)
                {
                    arr[i] = packer.UnpackInternal();
                }
            }
            else
            {
                var type = packer.GetMetaType(Int32Serializer.UnpackDirect(packer));
                var t    = type.MakeGenericType(typeIn);

                arr = (IList)System.Activator.CreateInstance(t);

                for (int i = 0; i < length; ++i)
                {
                    arr.Add(packer.UnpackInternal());
                }
            }

            return(arr);
        }
示例#11
0
        public object Unpack(Packer packer)
        {
            var bytes = (byte[])packer.UnpackInternal();

            return(System.Text.UTF8Encoding.UTF8.GetString(bytes));
        }
示例#12
0
        public static string UnpackDirect(Packer packer)
        {
            var bytes = (byte[])packer.UnpackInternal();

            return(System.Text.UTF8Encoding.UTF8.GetString(bytes));
        }