Beispiel #1
0
        public static void PackDirect(Packer packer, short obj)
        {
            var b = new Int16Bytes()
            {
                value = (short)obj
            };
            byte size = 2;

            if (b.b2 == 0)
            {
                --size;
            }
            if (b.b2 == 0 && b.b1 == 0)
            {
                --size;
            }
            packer.WriteByte(size);
            if (size >= 1)
            {
                packer.WriteByte(b.b1);
            }
            if (size >= 2)
            {
                packer.WriteByte(b.b2);
            }
        }
Beispiel #2
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);
                }
            }
        }
Beispiel #3
0
        public static void PackDirect(Packer packer, ushort obj)
        {
            var b = new Int16Bytes()
            {
                value = obj
            };

            packer.WriteByte(b.b1);
            packer.WriteByte(b.b2);
        }
Beispiel #4
0
        public void Pack(Packer stream, object obj)
        {
            var e    = obj as System.Enum;
            var type = e.GetType().GetEnumUnderlyingType();

            if (type == typeof(int))
            {
                stream.WriteByte((byte)TypeValue.Int32);
                var ser = new Int32Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(short))
            {
                stream.WriteByte((byte)TypeValue.Int16);
                var ser = new Int16Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(long))
            {
                stream.WriteByte((byte)TypeValue.Int64);
                var ser = new Int64Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(uint))
            {
                stream.WriteByte((byte)TypeValue.UInt32);
                var ser = new UInt32Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(ushort))
            {
                stream.WriteByte((byte)TypeValue.UInt16);
                var ser = new UInt16Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(ulong))
            {
                stream.WriteByte((byte)TypeValue.UInt64);
                var ser = new UInt64Serializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(byte))
            {
                stream.WriteByte((byte)TypeValue.Byte);
                var ser = new ByteSerializer();
                ser.Pack(stream, obj);
            }
            else if (type == typeof(sbyte))
            {
                stream.WriteByte((byte)TypeValue.SByte);
                var ser = new SByteSerializer();
                ser.Pack(stream, obj);
            }
            else
            {
                stream.WriteByte((byte)TypeValue.String);
                var ser = new StringSerializer();
                ser.Pack(stream, obj);
            }
        }
Beispiel #5
0
        public static void PackDirect(Packer packer, sbyte obj)
        {
            var @sbyte = new SByte()
            {
                value = obj
            };

            packer.WriteByte(@sbyte.b1);
        }
Beispiel #6
0
        public static void PackDirect(Packer packer, float obj)
        {
            var b = new FloatBytes()
            {
                value = obj
            };
            byte size = 4;

            if (b.b4 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0 && b.b2 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0 && b.b2 == 0 && 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);
            }
        }
Beispiel #7
0
        public static void PackDirect(Packer packer, uint value)
        {
            var b = new Int32Bytes()
            {
                value = value
            };
            byte size = 4;

            if (b.b4 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0 && b.b2 == 0)
            {
                --size;
            }
            if (b.b4 == 0 && b.b3 == 0 && b.b2 == 0 && 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);
            }
        }
Beispiel #8
0
        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.WriteByte((byte)arr.GetValue(i));
            }
        }
        public void Pack(Packer packer, object obj)
        {
            var pack = (ME.ECS.StatesHistory.HistoryEvent)obj;

            Int64Serializer.PackDirect(packer, pack.tick);
            Int32Serializer.PackDirect(packer, pack.order);
            Int32Serializer.PackDirect(packer, pack.rpcId);
            Int32Serializer.PackDirect(packer, pack.localOrder);
            Int32Serializer.PackDirect(packer, pack.objId);
            Int32Serializer.PackDirect(packer, pack.groupId);
            BooleanSerializer.PackDirect(packer, pack.storeInHistory);

            if (pack.parameters != null)
            {
                packer.WriteByte(1);
                var serializer = new ObjectArraySerializer();
                serializer.Pack(packer, pack.parameters);
            }
            else
            {
                packer.WriteByte(0);
            }
        }
        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]);
                }
            }
        }
Beispiel #11
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);
            }
        }
Beispiel #12
0
 public static void PackDirect(Packer packer, byte obj)
 {
     packer.WriteByte(obj);
 }
Beispiel #13
0
        public static void PackDirect(Packer packer, bool obj)
        {
            byte b = (bool)obj == true ? (byte)1 : (byte)0;

            packer.WriteByte(b);
        }