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); } }
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); } } }
public static void PackDirect(Packer packer, ushort obj) { var b = new Int16Bytes() { value = obj }; packer.WriteByte(b.b1); packer.WriteByte(b.b2); }
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); } }
public static void PackDirect(Packer packer, sbyte obj) { var @sbyte = new SByte() { value = obj }; packer.WriteByte(@sbyte.b1); }
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); } }
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); } }
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]); } } }
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); } }
public static void PackDirect(Packer packer, byte obj) { packer.WriteByte(obj); }
public static void PackDirect(Packer packer, bool obj) { byte b = (bool)obj == true ? (byte)1 : (byte)0; packer.WriteByte(b); }