예제 #1
0
 public void Pack(Packer packer, object obj)
 {
     Int16Serializer.PackDirect(packer, (short)obj);
 }
예제 #2
0
        public void Pack(Packer packer, object obj)
        {
            var packerObject = (Packer.PackerObject)obj;

            PackerObjectSerializer.PackDirect(packer, packerObject);
        }
예제 #3
0
        public void Pack(Packer packer, object obj)
        {
            var meta = (Packer.MetaType[])obj;

            MetaTypeArraySerializer.PackDirect(packer, meta);
        }
예제 #4
0
        public void Pack(Packer packer, object obj)
        {
            var arr   = (IList)obj;
            var type  = arr.GetType();
            var int32 = new Int32Serializer();

            int32.Pack(packer, arr.Count);

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

                int32.Pack(packer, packer.GetMetaTypeId(type.GetElementType()));

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

                    for (int j = 0; j < rank; ++j)
                    {
                        int32.Pack(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);
                int32.Pack(packer, packer.GetMetaTypeId(arr.GetType().GenericTypeArguments[0]));
                int32.Pack(packer, packer.GetMetaTypeId(arr.GetType().GetGenericTypeDefinition()));

                for (int i = 0; i < arr.Count; ++i)
                {
                    packer.PackInternal(arr[i]);
                }
            }
        }
예제 #5
0
 public static void PackDirect(Packer packer, Packer.PackerObject packerObject)
 {
     ByteArraySerializer.PackDirect(packer, packerObject.data);
     MetaSerializer.PackDirect(packer, packerObject.meta);
 }
예제 #6
0
 public void Pack(Packer packer, object obj)
 {
     ViewIdSerializer.PackDirect(packer, (ViewId)obj);
 }
예제 #7
0
 public void Pack(Packer packer, object obj)
 {
     Int32Serializer.PackDirect(packer, (RPCId)obj);
 }
예제 #8
0
 public void Pack(Packer packer, object obj)
 {
     CharSerializer.PackDirect(packer, (char)obj);
 }
예제 #9
0
 public void Pack(Packer packer, object obj)
 {
     UInt64Serializer.PackDirect(packer, (ulong)obj);
 }
예제 #10
0
 public static void PackDirect(Packer packer, char obj)
 {
     UInt16Serializer.PackDirect(packer, obj);
 }
예제 #11
0
 public static char UnpackDirect(Packer packer)
 {
     return((char)UInt16Serializer.UnpackDirect(packer));
 }
예제 #12
0
 public void Pack(Packer packer, object obj)
 {
     UInt32Serializer.PackDirect(packer, (uint)obj);
 }
예제 #13
0
 public object Unpack(Packer packer)
 {
     return(StringSerializer.UnpackDirect(packer));
 }
예제 #14
0
 public void Pack(Packer packer, object obj)
 {
     StringSerializer.PackDirect(packer, (string)obj);
 }
예제 #15
0
 public static void PackDirect(Packer packer, ViewId obj)
 {
     UInt32Serializer.PackDirect(packer, obj);
 }
예제 #16
0
        public static void PackDirect(Packer packer, double obj)
        {
            var b = new Float64Bytes()
            {
                value = obj
            };
            byte size = 8;

            if (b.b8 == 0)
            {
                --size;
                if (b.b7 == 0)
                {
                    --size;
                    if (b.b6 == 0)
                    {
                        --size;
                        if (b.b5 == 0)
                        {
                            --size;
                            if (b.b4 == 0)
                            {
                                --size;
                                if (b.b3 == 0)
                                {
                                    --size;
                                    if (b.b2 == 0)
                                    {
                                        --size;
                                        if (b.b1 == 0)
                                        {
                                            --size;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            packer.WriteByte(size);
            if (size >= 1)
            {
                packer.WriteByte(b.b1);
            }
            if (size >= 2)
            {
                packer.WriteByte(b.b2);
            }
            if (size >= 3)
            {
                packer.WriteByte(b.b3);
            }
            if (size >= 4)
            {
                packer.WriteByte(b.b4);
            }
            if (size >= 5)
            {
                packer.WriteByte(b.b5);
            }
            if (size >= 6)
            {
                packer.WriteByte(b.b6);
            }
            if (size >= 7)
            {
                packer.WriteByte(b.b7);
            }
            if (size >= 8)
            {
                packer.WriteByte(b.b8);
            }
        }
예제 #17
0
 public static ViewId UnpackDirect(Packer packer)
 {
     return(UInt32Serializer.UnpackDirect(packer));
 }
예제 #18
0
 public void Pack(Packer packer, object obj)
 {
     DoubleSerializer.PackDirect(packer, (double)obj);
 }
예제 #19
0
 public object Unpack(Packer packer)
 {
     return((ViewId)ViewIdSerializer.UnpackDirect(packer));
 }
예제 #20
0
        public static void PackDirect(Packer packer, ME.ECS.Views.IView view)
        {
            var viewId = Worlds.currentWorld.GetModule <ME.ECS.Views.ViewsModule>().GetViewSourceId(view);

            ViewIdSerializer.PackDirect(packer, viewId);
        }
예제 #21
0
 public object Unpack(Packer packer)
 {
     return((RPCId)Int32Serializer.UnpackDirect(packer));
 }
예제 #22
0
        public static ME.ECS.Views.IView UnpackDirect(Packer packer)
        {
            var viewId = ViewIdSerializer.UnpackDirect(packer);

            return(Worlds.currentWorld.GetModule <ME.ECS.Views.ViewsModule>().GetViewSource(viewId));
        }
예제 #23
0
        public object Unpack(Packer packer)
        {
            var int32   = new Int32Serializer();
            var length  = (int)int32.Unpack(packer);
            var isArray = packer.ReadByte();
            var typeId  = (int)int32.Unpack(packer);
            var typeIn  = packer.GetMetaType(typeId);

            IList arr = null;

            if (isArray == 2)
            {
                var rank = (int)int32.Unpack(packer);
                if (rank > 1)
                {
                    var lengthArray = new int[rank];
                    for (int j = 0; j < rank; ++j)
                    {
                        lengthArray[j] = (int)int32.Unpack(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((int)int32.Unpack(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);
        }
예제 #24
0
 public void Pack(Packer packer, object obj)
 {
     ViewSerializer.PackDirect(packer, (ME.ECS.Views.IView)obj);
 }
예제 #25
0
 public static void PackDirect(Packer packer, Packer.MetaType meta)
 {
     Int32Serializer.PackDirect(packer, meta.id);
     StringSerializer.PackDirect(packer, meta.type);
 }
예제 #26
0
 public void Pack(Packer packer, object obj)
 {
     Int64Serializer.PackDirect(packer, (Tick)obj);
 }
예제 #27
0
 public object Unpack(Packer packer)
 {
     return(PackerObjectSerializer.UnpackDirect(packer));
 }
예제 #28
0
 public object Unpack(Packer packer)
 {
     return((Tick)Int64Serializer.UnpackDirect(packer));
 }
예제 #29
0
 public object Unpack(Packer packer)
 {
     return(MetaTypeArraySerializer.UnpackDirect(packer));
 }
예제 #30
0
 public object Unpack(Packer packer)
 {
     return(UInt16Serializer.UnpackDirect(packer));
 }