Exemple #1
0
        public void Pack(Packer packer, object obj)
        {
            var packerObject = (Packer.PackerObject)obj;

            packer.PackInternal(packerObject.meta);
            packer.PackInternal(packerObject.data);
        }
Exemple #2
0
        public void Pack(Packer packer, object obj)
        {
            var dict = (ME.ECS.Collections.IDictionaryInt)obj;
            var type = dict.GetType();

            Int32Serializer.PackDirect(packer, dict.Count);

            Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GenericTypeArguments[0]));
            Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GetGenericTypeDefinition()));

            foreach (DictionaryEntry entry in dict)
            {
                packer.PackInternal(entry.Key);
                packer.PackInternal(entry.Value);
            }
        }
Exemple #3
0
        public void Pack(Packer packer, object obj)
        {
            var v     = (string)obj;
            var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(v);

            packer.PackInternal(bytes);
        }
Exemple #4
0
        public void Pack(Packer packer, object obj, System.Type rootType)
        {
            var fields = rootType.GetCachedFields();

            for (int i = 0; i < fields.Length; ++i)
            {
                var val = fields[i].GetValue(obj);
                if (val == null)
                {
                    packer.WriteByte((byte)TypeValue.Null);
                    continue;
                }

                var type = fields[i].GetFieldType();
                if (packer.serializers.TryGetValue(type, out var ser) == true)
                {
                    packer.WriteByte(ser.typeValue);
                    ser.pack.Invoke(packer, val);
                }
                else
                {
                    packer.PackInternal(val);
                }
            }
        }
Exemple #5
0
        public void Pack(Packer packer, object obj)
        {
            var meta = (Packer.MetaType[])obj;

            Int32Serializer.PackDirect(packer, meta.Length);
            for (int i = 0; i < meta.Length; ++i)
            {
                packer.PackInternal(meta[i]);
            }
        }
        public void Pack(Packer packer, object obj)
        {
            var arr = (System.Array)obj;

            Int32Serializer.PackDirect(packer, arr.Length);

            for (int i = 0; i < arr.Length; ++i)
            {
                packer.PackInternal(arr.GetValue(i));
            }
        }
        public void Pack(Packer packer, object obj)
        {
            var sentinel = (IDisposeSentinel)obj;
            var type     = sentinel.GetType();

            Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GetGenericTypeDefinition()));
            Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GenericTypeArguments[0]));
            Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GenericTypeArguments[1]));

            packer.PackInternal(sentinel.GetData());
            Int64Serializer.PackDirect(packer, sentinel.GetTick());
        }
Exemple #8
0
        public void Pack(Packer packer, object obj)
        {
            var meta = (Packer.Meta)obj;
            var arr  = new Packer.MetaType[meta.meta.Count];
            var i    = 0;

            foreach (var kv in meta.meta)
            {
                arr[i++] = kv.Value;
            }

            packer.PackInternal(arr);
        }
Exemple #9
0
        public byte[] ToArray()
        {
            var obj = new PackerObject();

            obj.meta = this.meta;
            obj.data = this.stream.ToArray();

            byte[] output = null;
            using (var stream = new System.IO.MemoryStream()) {
                var packer = new Packer(this.serializers, stream);
                packer.PackInternal(obj);

                output = stream.ToArray();
            }

            return(output);
        }
        public void Pack(Packer packer, object obj)
        {
            var arr  = (IList)obj;
            var type = arr.GetType();

            Int32Serializer.PackDirect(packer, arr.Count);

            if (type.IsArray == true)
            {
                var rank = type.GetArrayRank();
                if (rank > 1)
                {
                    packer.WriteByte(2);
                }
                else
                {
                    packer.WriteByte(1);
                }

                Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(type.GetElementType()));

                if (rank > 1)
                {
                    Int32Serializer.PackDirect(packer, rank);
                    var arrData = (System.Array)arr;

                    for (int j = 0; j < rank; ++j)
                    {
                        Int32Serializer.PackDirect(packer, arrData.GetLength(j));
                    }

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

                    WrapDimension(new int[rank], 0);
                }
                else
                {
                    for (int i = 0; i < arr.Count; ++i)
                    {
                        packer.PackInternal(arr[i]);
                    }
                }
            }
            else
            {
                packer.WriteByte(0);
                Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(arr.GetType().GenericTypeArguments[0]));
                Int32Serializer.PackDirect(packer, packer.GetMetaTypeId(arr.GetType().GetGenericTypeDefinition()));

                for (int i = 0; i < arr.Count; ++i)
                {
                    packer.PackInternal(arr[i]);
                }
            }
        }
Exemple #11
0
        public static void PackDirect(Packer packer, string obj)
        {
            var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(obj);

            packer.PackInternal(bytes);
        }