diff --git a/src/writeCs/gCsCode.cs b/src/writeCs/gCsCode.cs index 447ea52..ea5acf3 100644 --- a/src/writeCs/gCsCode.cs +++ b/src/writeCs/gCsCode.cs @@ -1,14 +1,30 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Data; using System.IO; +using MiscUtil.Conversion; +using MiscUtil.IO; -namespace ProtoMsg +namespace GenProto { - public static class Protocol + public static class ProtocolCore { + public interface ISerialize + { + void Serialize(EndianBinaryWriter binaryWriter); + byte[] Serialize(); + } + + public interface IDeserialize + { + void Deserialize(EndianBinaryReader binaryReader); + void Deserialize(byte[] data); + } + public enum BasicTypeEnum { + Custom = 0x00, Boolean = 0x01, Int8 = 0x02, UInt8 = 0x03, @@ -39,11 +55,11 @@ namespace ProtoMsg float => BasicTypeEnum.Float, double => BasicTypeEnum.Double, string => BasicTypeEnum.String, - _ => throw new InvalidOperationException($"unexpect type: {value.GetType().FullName}") + _ => BasicTypeEnum.Custom, }; } - public static void WriteValue(this BinaryWriter binaryWriter, T value) + public static void WriteValue(this EndianBinaryWriter binaryWriter, T value) { switch (value) { @@ -81,46 +97,134 @@ namespace ProtoMsg binaryWriter.Write(doubleValue); break; case string stringValue: - binaryWriter.Write(stringValue); + var bytesLength = (ushort)binaryWriter.Encoding.GetByteCount(stringValue); + binaryWriter.Write(bytesLength); + var bytes = binaryWriter.Encoding.GetBytes(stringValue); + binaryWriter.Write(bytes); break; default: - throw new InvalidOperationException($"unexpect type: {value.GetType().FullName}"); + { + switch (value) + { + case IList listValue: + binaryWriter.WriteList(listValue); + break; + case ISerialize serialize: + serialize.Serialize(binaryWriter); + break; + default: + if (value != null) + { + throw new InvalidOperationException($"unexpect type: {value.GetType().FullName}"); + } + + break; + } + break; + } } } - public static void WriteList(this BinaryWriter binaryWriter, IList list) + public static void WriteList(this EndianBinaryWriter binaryWriter, IList list) { - var length = (ushort) (list?.Count ?? 0); + var length = (ushort)(list?.Count ?? 0); binaryWriter.Write(length); if (list == null) return; for (var idx = 0; idx < length; idx++) { var value = list[idx]; + binaryWriter.WriteValue(value); + } + } - if (idx == 0) - { - var basicType = JudgeType(value); - binaryWriter.Write((byte) basicType); - } + public static void ReadValue(this EndianBinaryReader binaryReader, out bool value) + { + value = binaryReader.ReadBoolean(); + } - binaryWriter.WriteValue(value); + public static void ReadValue(this EndianBinaryReader binaryReader, out sbyte value) + { + value = binaryReader.ReadSByte(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out byte value) + { + value = binaryReader.ReadByte(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out ushort value) + { + value = binaryReader.ReadUInt16(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out short value) + { + value = binaryReader.ReadInt16(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out int value) + { + value = binaryReader.ReadInt32(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out uint value) + { + value = binaryReader.ReadUInt32(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out long value) + { + value = binaryReader.ReadInt64(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out ulong value) + { + value = binaryReader.ReadUInt64(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out float value) + { + value = binaryReader.ReadSingle(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out double value) + { + value = binaryReader.ReadDouble(); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out string value) + { + var bytesLength = binaryReader.ReadUInt16(); + var bytes = binaryReader.ReadBytes(bytesLength); + value = binaryReader.Encoding.GetString(bytes, 0, bytes.Length); + } + + public static void ReadValue(this EndianBinaryReader binaryReader, out T value) where T : new() + { + value = default; + value = new T(); + if (value is not IDeserialize deserialize) + { + throw new InvalidOperationException($"error type: {typeof(T).FullName}"); } + + deserialize.Deserialize(binaryReader); } - public static void ReadList(this BinaryReader binaryReader, out IList list) + public static void ReadValue(this EndianBinaryReader binaryReader, out List outList, BasicTypeEnum basicTypeEnum) where T : new() { + outList = default; + IList list = default; + var length = binaryReader.ReadUInt16(); if (length <= 0) { - list = default; return; } - list = default; - var basicTypeEnum = (BasicTypeEnum) binaryReader.ReadByte(); - for (int idx = 0; idx < length; idx++) + for (var idx = 0; idx < length; idx++) { switch (basicTypeEnum) { @@ -184,18 +288,147 @@ namespace ProtoMsg var stringValue = binaryReader.ReadString(); list.Add(stringValue); break; + case BasicTypeEnum.Custom: + list ??= new List(length); + if (new T() is IDeserialize item) + { + item.Deserialize(binaryReader); + list.Add(item); + } + break; default: - throw new ArgumentOutOfRangeException(); + throw new InvalidOperationException(); } } + + outList = list as List; } } -} + + public class test : ProtocolCore.ISerialize, ProtocolCore.IDeserialize + { + public const int ProtoId = 1; + public string aa; + + public byte[] Serialize(bool bigEndian = true) + { + using var memoryStream = new MemoryStream(); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); + Serialize(binaryWriter); + return memoryStream.ToArray(); + } + + public void Deserialize(byte[] data, bool bigEndian = true) + { + using var memoryStream = new MemoryStream(data); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); + Deserialize(binaryReader); + } + + public void Serialize(EndianBinaryWriter binaryWriter) + { + binaryWriter.WriteValue(aa); + } + + public void Deserialize(EndianBinaryReader binaryReader) + { + binaryReader.ReadValue(out aa); + } + } + + public class phoneNumber : ProtocolCore.ISerialize, ProtocolCore.IDeserialize + { + public const int ProtoId = 2; + public test number; + public int type; + + public byte[] Serialize() + { + using var memoryStream = new MemoryStream(); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); + Serialize(binaryWriter); + return memoryStream.ToArray(); + } + + public void Deserialize(byte[] data) + { + using var memoryStream = new MemoryStream(data); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); + Deserialize(binaryReader); + } + + public void Serialize(EndianBinaryWriter binaryWriter) + { + binaryWriter.WriteValue(number); + binaryWriter.WriteValue(type); + } + + public void Deserialize(EndianBinaryReader binaryReader) + { + binaryReader.ReadValue(out number); + binaryReader.ReadValue(out type); + } + } + + public class person : ProtocolCore.ISerialize, ProtocolCore.IDeserialize + { + public const int ProtoId = 3; + public string name; + public int id; + public string email; + public List phone; + + public byte[] Serialize() + { + using var memoryStream = new MemoryStream(); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); + Serialize(binaryWriter); + return memoryStream.ToArray(); + } + + public void Deserialize(byte[] data) + { + using var memoryStream = new MemoryStream(data); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); + Deserialize(binaryReader); + } + + public void Serialize(EndianBinaryWriter binaryWriter) + { + binaryWriter.WriteValue(name); + binaryWriter.WriteValue(id); + binaryWriter.WriteValue(email); + if (xx != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(phone); + } + else + { + + } + binaryWriter.WriteValue(phone); + } + + public void Deserialize(EndianBinaryReader binaryReader) + { + binaryReader.ReadValue(out name); + binaryReader.ReadValue(out id); + binaryReader.ReadValue(out email); + binaryReader.ReadValue(out phone, 0x00); + } + } + + public class addressBook : ProtocolCore.ISerialize, ProtocolCore.IDeserialize + { + public const int ProtoId = 4; + public List person; + public List other; public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -203,6 +436,20 @@ namespace ProtoMsg public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); - } \ No newline at end of file + } + + public void Serialize(EndianBinaryWriter binaryWriter) + { + binaryWriter.WriteValue(person); + binaryWriter.WriteValue(other); + } + + public void Deserialize(EndianBinaryReader binaryReader) + { + binaryReader.ReadValue(out person); + binaryReader.ReadValue(out other); + } + } +} \ No newline at end of file diff --git a/src/writeCs/gCsField.erl b/src/writeCs/gCsField.erl index 44c5dc1..0c8a7cc 100644 --- a/src/writeCs/gCsField.erl +++ b/src/writeCs/gCsField.erl @@ -15,31 +15,32 @@ , <<"double">> ]). +-define(CustomTypeEnum, <<"0x00">>). -define(TypeValue, [ - {<<"bool">>, <<"bool">>} - , {<<"int8">>, <<"sbyte">>} - , {<<"uint8">>, <<"byte">>} - , {<<"int16">>, <<"short">>} - , {<<"uint16">>, <<"ushort">>} - , {<<"int32">>, <<"int">>} - , {<<"uint32">>, <<"uint">>} - , {<<"int64">>, <<"long">>} - , {<<"uint64">>, <<"ulong">>} - , {<<"float">>, <<"float">>} - , {<<"double">>, <<"double">>} - , {<<"string">>, <<"string">>} + {<<"bool">>, <<"bool">>, <<"0x01">>} + , {<<"int8">>, <<"sbyte">>, <<"0x02">>} + , {<<"uint8">>, <<"byte">>, <<"0x03">>} + , {<<"int16">>, <<"short">>, <<"0x04">>} + , {<<"uint16">>, <<"ushort">>, <<"0x05">>} + , {<<"int32">>, <<"int">>, <<"0x06">>} + , {<<"uint32">>, <<"uint">>, <<"0x07">>} + , {<<"int64">>, <<"long">>, <<"0x08">>} + , {<<"uint64">>, <<"ulong">>, <<"0x09">>} + , {<<"float">>, <<"float">>, <<"0x10">>} + , {<<"double">>, <<"double">>, <<"0x11">>} + , {<<"string">>, <<"string">>, <<"0x12">>} ]). builtMemberStr({TypeStr, NameStr}) -> case lists:keyfind(TypeStr, 1, ?TypeValue) of - {TypeStr, CSTypeStr} -> + {TypeStr, CSTypeStr, _TypeEnumVale} -> <<"\t\tpublic ", CSTypeStr/binary, " ", NameStr/binary, ";\n">>; _ -> case TypeStr of <<"list[", LeftStr/binary>> -> [SubTypeStr | _] = re:split(LeftStr, <<"\\]">>, [{return, binary}]), case lists:keyfind(SubTypeStr, 1, ?TypeValue) of - {SubTypeStr, SubCSTypeStr} -> + {SubTypeStr, SubCSTypeStr, _TypeEnumVale} -> <<"\t\tpublic List<", SubCSTypeStr/binary, "> ", NameStr/binary, ";\n">>; _ -> <<"\t\tpublic List<", SubTypeStr/binary, "> ", NameStr/binary, ";\n">> @@ -48,3 +49,41 @@ builtMemberStr({TypeStr, NameStr}) -> <<"\t\tpublic ", TypeStr/binary, " ", NameStr/binary, ";\n">> end end. + +builtEncodeStr({TypeStr, NameStr}) -> + case lists:keyfind(TypeStr, 1, ?TypeValue) of + {TypeStr, _CSTypeStr, _TypeEnumVale} -> + <<"\t\t\tbinaryWriter.WriteValue(", NameStr/binary, ");\n">>; + _ -> + case TypeStr of + <<"list[", LeftStr/binary>> -> + [SubTypeStr | _] = re:split(LeftStr, <<"\\]">>, [{return, binary}]), + case lists:keyfind(SubTypeStr, 1, ?TypeValue) of + {SubTypeStr, _CSTypeStr, _TypeEnumVale} -> + <<"\t\t\tbinaryWriter.WriteValue(", NameStr/binary, ");\n">>; + _ -> + <<"\t\t\tbinaryWriter.WriteValue(", NameStr/binary, ");\n">> + end; + _ -> + <<"\t\t\tif (", NameStr/binary, " != null)\n\t\t\t{\n\t\t\t\tbinaryWriter.WriteValue(1);\n\t\t\t\tbinaryWriter.WriteValue(", NameStr/binary, ");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tbinaryWriter.WriteValue(0);\n\t\t\t}\n">> + end + end. + +builtDecodeStr({TypeStr, NameStr}) -> + case lists:keyfind(TypeStr, 1, ?TypeValue) of + {TypeStr, _CSTypeStr, _TypeEnumVale} -> + <<"\t\t\tbinaryReader.ReadValue(out ", NameStr/binary, ");\n">>; + _ -> + case TypeStr of + <<"list[", LeftStr/binary>> -> + [SubTypeStr | _] = re:split(LeftStr, <<"\\]">>, [{return, binary}]), + case lists:keyfind(SubTypeStr, 1, ?TypeValue) of + {SubTypeStr, _CSTypeStr, TypeEnumVale} -> + <<"\t\t\tbinaryReader.ReadValue(out ", NameStr/binary, ", ", TypeEnumVale/binary, ");\n">>; + _ -> + <<"\t\t\tbinaryReader.ReadValue(out ", NameStr/binary,", ", (?CustomTypeEnum)/binary, ");\n">> + end; + _ -> + <<"\t\t\tif (binaryReader.ReadBoolean())\n\t\t\t{\n\t\t\t\tbinaryReader.ReadValue(out ", NameStr/binary, ");\n\t\t\t}\n">> + end + end. diff --git a/src/writeCs/gCsGen.erl b/src/writeCs/gCsGen.erl index 5cda89a..b25140e 100644 --- a/src/writeCs/gCsGen.erl +++ b/src/writeCs/gCsGen.erl @@ -5,11 +5,13 @@ ]). protoHeader() -> - <<"using System; +<<"using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; +using MiscUtil.Conversion; +using MiscUtil.IO; namespace GenProto { @@ -17,13 +19,13 @@ namespace GenProto { public interface ISerialize { - void Serialize(BinaryWriter binaryWriter); + void Serialize(EndianBinaryWriter binaryWriter); byte[] Serialize(); } public interface IDeserialize { - void Deserialize(BinaryReader binaryReader); + void Deserialize(EndianBinaryReader binaryReader); void Deserialize(byte[] data); } @@ -64,7 +66,7 @@ namespace GenProto }; } - public static void WriteValue(this BinaryWriter binaryWriter, T value) + public static void WriteValue(this EndianBinaryWriter binaryWriter, T value) { switch (value) { @@ -102,11 +104,13 @@ namespace GenProto binaryWriter.Write(doubleValue); break; case string stringValue: - binaryWriter.Write(stringValue); + var bytesLength = (ushort)binaryWriter.Encoding.GetByteCount(stringValue); + binaryWriter.Write(bytesLength); + var bytes = binaryWriter.Encoding.GetBytes(stringValue); + binaryWriter.Write(bytes); break; default: { - binaryWriter.Write(value != null); switch (value) { case IList listValue: @@ -123,104 +127,92 @@ namespace GenProto break; } - break; } } } - public static void WriteList(this BinaryWriter binaryWriter, IList list) + public static void WriteList(this EndianBinaryWriter binaryWriter, IList list) { - var length = (ushort) (list?.Count ?? 0); + var length = (ushort)(list?.Count ?? 0); binaryWriter.Write(length); if (list == null) return; for (var idx = 0; idx < length; idx++) { var value = list[idx]; - - if (idx == 0) - { - var basicType = JudgeType(value); - binaryWriter.Write((byte) basicType); - } - binaryWriter.WriteValue(value); } } - public static void ReadValue(this BinaryReader binaryReader, out bool value) + public static void ReadValue(this EndianBinaryReader binaryReader, out bool value) { value = binaryReader.ReadBoolean(); } - public static void ReadValue(this BinaryReader binaryReader, out sbyte value) + public static void ReadValue(this EndianBinaryReader binaryReader, out sbyte value) { value = binaryReader.ReadSByte(); } - public static void ReadValue(this BinaryReader binaryReader, out byte value) + public static void ReadValue(this EndianBinaryReader binaryReader, out byte value) { value = binaryReader.ReadByte(); } - public static void ReadValue(this BinaryReader binaryReader, out ushort value) + public static void ReadValue(this EndianBinaryReader binaryReader, out ushort value) { value = binaryReader.ReadUInt16(); } - public static void ReadValue(this BinaryReader binaryReader, out short value) + public static void ReadValue(this EndianBinaryReader binaryReader, out short value) { value = binaryReader.ReadInt16(); } - public static void ReadValue(this BinaryReader binaryReader, out int value) + public static void ReadValue(this EndianBinaryReader binaryReader, out int value) { value = binaryReader.ReadInt32(); } - public static void ReadValue(this BinaryReader binaryReader, out uint value) + public static void ReadValue(this EndianBinaryReader binaryReader, out uint value) { value = binaryReader.ReadUInt32(); } - public static void ReadValue(this BinaryReader binaryReader, out long value) + public static void ReadValue(this EndianBinaryReader binaryReader, out long value) { value = binaryReader.ReadInt64(); } - public static void ReadValue(this BinaryReader binaryReader, out ulong value) + public static void ReadValue(this EndianBinaryReader binaryReader, out ulong value) { value = binaryReader.ReadUInt64(); } - public static void ReadValue(this BinaryReader binaryReader, out float value) + public static void ReadValue(this EndianBinaryReader binaryReader, out float value) { value = binaryReader.ReadSingle(); } - public static void ReadValue(this BinaryReader binaryReader, out double value) + public static void ReadValue(this EndianBinaryReader binaryReader, out double value) { value = binaryReader.ReadDouble(); } - public static void ReadValue(this BinaryReader binaryReader, out string value) + public static void ReadValue(this EndianBinaryReader binaryReader, out string value) { - value = binaryReader.ReadString(); + var bytesLength = binaryReader.ReadUInt16(); + var bytes = binaryReader.ReadBytes(bytesLength); + value = binaryReader.Encoding.GetString(bytes, 0, bytes.Length); } - public static void ReadValue(this BinaryReader binaryReader, out T value) where T : new() + public static void ReadValue(this EndianBinaryReader binaryReader, out T value) where T : new() { value = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } - value = new T(); - if (!(value is IDeserialize deserialize)) + if (value is not IDeserialize deserialize) { throw new InvalidOperationException($\"error type: {typeof(T).FullName}\"); } @@ -228,15 +220,10 @@ namespace GenProto deserialize.Deserialize(binaryReader); } - public static void ReadValue(this BinaryReader binaryReader, out List outList) where T : new() + public static void ReadValue(this EndianBinaryReader binaryReader, out List outList, BasicTypeEnum basicTypeEnum) where T : new() { outList = default; IList list = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } var length = binaryReader.ReadUInt16(); if (length <= 0) @@ -244,7 +231,6 @@ namespace GenProto return; } - var basicTypeEnum = (BasicTypeEnum) binaryReader.ReadByte(); for (var idx = 0; idx < length; idx++) { switch (basicTypeEnum) @@ -311,19 +297,12 @@ namespace GenProto break; case BasicTypeEnum.Custom: list ??= new List(length); - var state = binaryReader.ReadBoolean(); - if (state) - { - if (new T() is IDeserialize item) + if (new T() is IDeserialize item) { item.Deserialize(binaryReader); list.Add(item); } - } - break; - - default: throw new InvalidOperationException(); } @@ -344,7 +323,7 @@ spellClassMember(FieldList) -> spellCalssDSTem() -> <<"\n\t\tpublic byte[] Serialize()\n\t\t{\n\t\t\tusing var memoryStream = new MemoryStream(); -\t\t\tusing var binaryWriter = new BinaryWriter(memoryStream); +\t\t\tusing var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); \t\t\tSerialize(binaryWriter); \t\t\treturn memoryStream.ToArray(); \t\t} @@ -352,18 +331,18 @@ spellCalssDSTem() -> \t\tpublic void Deserialize(byte[] data) \t\t{ \t\t\tusing var memoryStream = new MemoryStream(data); -\t\t\tusing var binaryReader = new BinaryReader(memoryStream); +\t\t\tusing var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); \t\t\tDeserialize(binaryReader); \t\t}\n">>. spellCalssSerialize(FieldList) -> - FunHead = <<"\t\tpublic void Serialize(BinaryWriter binaryWriter)\n\t\t{\n">>, - FunBody = <<<<"\t\t\tbinaryWriter.WriteValue(", NameStr/binary, ");\n">> || {_TypeStr, NameStr} <- FieldList>>, + FunHead = <<"\t\tpublic void Serialize(EndianBinaryWriter binaryWriter)\n\t\t{\n">>, + FunBody = <<<<(gCsField:builtEncodeStr(OneTypeName))/binary>> || OneTypeName <- FieldList>>, <>. spellCalssDeserialize(FieldList) -> FunHead = <<"\t\tpublic void Deserialize(BinaryReader binaryReader)\n\t\t{\n">>, - FunBody = <<<<"\t\t\tbinaryReader.ReadValue(out ", NameStr/binary, ");\n">> || {_TypeStr, NameStr} <- FieldList>>, + FunBody = <<<<(gCsField:builtDecodeStr(OneTypeName))/binary>> || OneTypeName <- FieldList>>, <>. spellClassEnd() -> diff --git a/src/writeCs/sample/ProtocolMsg.cs b/src/writeCs/sample/ProtocolMsg.cs deleted file mode 100644 index 1ae82ce..0000000 --- a/src/writeCs/sample/ProtocolMsg.cs +++ /dev/null @@ -1,598 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Data; -using System.IO; - -namespace GenProto -{ - public static class ProtocolCore - { - public interface ISerialize - { - void Serialize(BinaryWriter binaryWriter); - byte[] Serialize(); - } - - public interface IDeserialize - { - void Deserialize(BinaryReader binaryReader); - void Deserialize(byte[] data); - } - - public enum BasicTypeEnum - { - Custom = 0x00, - Boolean = 0x01, - Int8 = 0x02, - UInt8 = 0x03, - UInt16 = 0x04, - Int16 = 0x05, - Int32 = 0x06, - UInt32 = 0x07, - Int64 = 0x08, - UInt64 = 0x09, - Float = 0x10, - Double = 0x11, - String = 0x12, - } - - public static BasicTypeEnum JudgeType(T value) - { - return value switch - { - bool => BasicTypeEnum.Boolean, - byte => BasicTypeEnum.Int8, - sbyte => BasicTypeEnum.UInt8, - ushort => BasicTypeEnum.UInt16, - short => BasicTypeEnum.Int16, - int => BasicTypeEnum.Int32, - uint => BasicTypeEnum.UInt32, - long => BasicTypeEnum.Int64, - ulong => BasicTypeEnum.UInt64, - float => BasicTypeEnum.Float, - double => BasicTypeEnum.Double, - string => BasicTypeEnum.String, - _ => BasicTypeEnum.Custom, - }; - } - - public static void WriteValue(this BinaryWriter binaryWriter, T value) - { - switch (value) - { - case bool boolValue: - binaryWriter.Write(boolValue); - break; - case byte byteValue: - binaryWriter.Write(byteValue); - break; - case sbyte sbyteValue: - binaryWriter.Write(sbyteValue); - break; - case ushort ushortValue: - binaryWriter.Write(ushortValue); - break; - case short shortValue: - binaryWriter.Write(shortValue); - break; - case int intValue: - binaryWriter.Write(intValue); - break; - case uint uintValue: - binaryWriter.Write(uintValue); - break; - case long longValue: - binaryWriter.Write(longValue); - break; - case ulong ulongValue: - binaryWriter.Write(ulongValue); - break; - case float floatValue: - binaryWriter.Write(floatValue); - break; - case double doubleValue: - binaryWriter.Write(doubleValue); - break; - case string stringValue: - binaryWriter.Write(stringValue); - break; - default: - { - binaryWriter.Write(value != null); - switch (value) - { - case IList listValue: - binaryWriter.WriteList(listValue); - break; - case ISerialize serialize: - serialize.Serialize(binaryWriter); - break; - default: - if (value != null) - { - throw new InvalidOperationException($"unexpect type: {value.GetType().FullName}"); - } - - break; - } - - break; - } - } - } - - - public static void WriteList(this BinaryWriter binaryWriter, IList list) - { - var length = (ushort) (list?.Count ?? 0); - binaryWriter.Write(length); - - if (list == null) return; - for (var idx = 0; idx < length; idx++) - { - var value = list[idx]; - - if (idx == 0) - { - var basicType = JudgeType(value); - binaryWriter.Write((byte) basicType); - } - - binaryWriter.WriteValue(value); - } - } - - public static void ReadValue(this BinaryReader binaryReader, out bool value) - { - value = binaryReader.ReadBoolean(); - } - - public static void ReadValue(this BinaryReader binaryReader, out sbyte value) - { - value = binaryReader.ReadSByte(); - } - - public static void ReadValue(this BinaryReader binaryReader, out byte value) - { - value = binaryReader.ReadByte(); - } - - public static void ReadValue(this BinaryReader binaryReader, out ushort value) - { - value = binaryReader.ReadUInt16(); - } - - public static void ReadValue(this BinaryReader binaryReader, out short value) - { - value = binaryReader.ReadInt16(); - } - - public static void ReadValue(this BinaryReader binaryReader, out int value) - { - value = binaryReader.ReadInt32(); - } - - public static void ReadValue(this BinaryReader binaryReader, out uint value) - { - value = binaryReader.ReadUInt32(); - } - - public static void ReadValue(this BinaryReader binaryReader, out long value) - { - value = binaryReader.ReadInt64(); - } - - public static void ReadValue(this BinaryReader binaryReader, out ulong value) - { - value = binaryReader.ReadUInt64(); - } - - public static void ReadValue(this BinaryReader binaryReader, out float value) - { - value = binaryReader.ReadSingle(); - } - - public static void ReadValue(this BinaryReader binaryReader, out double value) - { - value = binaryReader.ReadDouble(); - } - - public static void ReadValue(this BinaryReader binaryReader, out string value) - { - value = binaryReader.ReadString(); - } - - public static void ReadValue(this BinaryReader binaryReader, out T value) where T : new() - { - value = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } - - value = new T(); - if (!(value is IDeserialize deserialize)) - { - throw new InvalidOperationException($"error type: {typeof(T).FullName}"); - } - - deserialize.Deserialize(binaryReader); - } - - public static void ReadValue(this BinaryReader binaryReader, out List outList) where T : new() - { - outList = default; - IList list = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } - - var length = binaryReader.ReadUInt16(); - if (length <= 0) - { - return; - } - - var basicTypeEnum = (BasicTypeEnum) binaryReader.ReadByte(); - for (var idx = 0; idx < length; idx++) - { - switch (basicTypeEnum) - { - case BasicTypeEnum.Boolean: - list ??= new List(length); - var boolValue = binaryReader.ReadBoolean(); - list.Add(boolValue); - break; - case BasicTypeEnum.Int8: - list ??= new List(length); - var sbyteValue = binaryReader.ReadSByte(); - list.Add(sbyteValue); - break; - case BasicTypeEnum.UInt8: - list ??= new List(length); - var byteValue = binaryReader.ReadByte(); - list.Add(byteValue); - break; - case BasicTypeEnum.UInt16: - list ??= new List(length); - var ushortValue = binaryReader.ReadUInt16(); - list.Add(ushortValue); - break; - case BasicTypeEnum.Int16: - list ??= new List(length); - var shortValue = binaryReader.ReadInt16(); - list.Add(shortValue); - break; - case BasicTypeEnum.Int32: - list ??= new List(length); - var intValue = binaryReader.ReadInt32(); - list.Add(intValue); - break; - case BasicTypeEnum.UInt32: - list ??= new List(length); - var uintValue = binaryReader.ReadUInt32(); - list.Add(uintValue); - break; - case BasicTypeEnum.Int64: - list ??= new List(length); - var longValue = binaryReader.ReadInt64(); - list.Add(longValue); - break; - case BasicTypeEnum.UInt64: - list ??= new List(length); - var ulongValue = binaryReader.ReadUInt64(); - list.Add(ulongValue); - break; - case BasicTypeEnum.Float: - list ??= new List(length); - var singleValue = binaryReader.ReadSingle(); - list.Add(singleValue); - break; - case BasicTypeEnum.Double: - list ??= new List(length); - var doubleValue = binaryReader.ReadDouble(); - list.Add(doubleValue); - break; - case BasicTypeEnum.String: - list ??= new List(length); - var stringValue = binaryReader.ReadString(); - list.Add(stringValue); - break; - case BasicTypeEnum.Custom: - list ??= new List(length); - var state = binaryReader.ReadBoolean(); - if (state) - { - if (new T() is IDeserialize item) - { - item.Deserialize(binaryReader); - list.Add(item); - } - } - - break; - - - default: - throw new InvalidOperationException(); - } - } - - outList = list as List; - } - } - - public class AllType : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public const int protoId = 11; - public bool Bool; - public sbyte Int8; - public byte UInt8; - public ushort UInt16; - public short Int16; - public int Int32; - public uint UInt32; - public long Int64; - public ulong UInt64; - public float Float; - public double Double; - public string String; - public SubType SubType; - public List ListSubType; - public List ListBool; - public List ListInt8; - public List ListUInt8; - public List ListUInt16; - public List ListInt16; - public List ListInt32; - public List ListUInt32; - public List ListInt64; - public List ListUInt64; - public List ListFloat; - public List ListDouble; - public List ListString; - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(Bool); - binaryWriter.WriteValue(Int8); - binaryWriter.WriteValue(UInt8); - binaryWriter.WriteValue(UInt16); - binaryWriter.WriteValue(Int16); - binaryWriter.WriteValue(Int32); - binaryWriter.WriteValue(UInt32); - binaryWriter.WriteValue(Int64); - binaryWriter.WriteValue(UInt64); - binaryWriter.WriteValue(Float); - binaryWriter.WriteValue(Double); - binaryWriter.WriteValue(String); - binaryWriter.WriteValue(SubType); - binaryWriter.WriteValue(ListSubType); - binaryWriter.WriteValue(ListBool); - binaryWriter.WriteValue(ListInt8); - binaryWriter.WriteValue(ListUInt8); - binaryWriter.WriteValue(ListUInt16); - binaryWriter.WriteValue(ListInt16); - binaryWriter.WriteValue(ListInt32); - binaryWriter.WriteValue(ListUInt32); - binaryWriter.WriteValue(ListInt64); - binaryWriter.WriteValue(ListUInt64); - binaryWriter.WriteValue(ListFloat); - binaryWriter.WriteValue(ListDouble); - binaryWriter.WriteValue(ListString); - } - - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out Bool); - binaryReader.ReadValue(out Int8); - binaryReader.ReadValue(out UInt8); - binaryReader.ReadValue(out UInt16); - binaryReader.ReadValue(out Int16); - binaryReader.ReadValue(out Int32); - binaryReader.ReadValue(out UInt32); - binaryReader.ReadValue(out Int64); - binaryReader.ReadValue(out UInt64); - binaryReader.ReadValue(out Float); - binaryReader.ReadValue(out Double); - binaryReader.ReadValue(out String); - binaryReader.ReadValue(out SubType); - binaryReader.ReadValue(out ListSubType); - binaryReader.ReadValue(out ListBool); - binaryReader.ReadValue(out ListInt8); - binaryReader.ReadValue(out ListUInt8); - binaryReader.ReadValue(out ListUInt16); - binaryReader.ReadValue(out ListInt16); - binaryReader.ReadValue(out ListInt32); - binaryReader.ReadValue(out ListUInt32); - binaryReader.ReadValue(out ListInt64); - binaryReader.ReadValue(out ListUInt64); - binaryReader.ReadValue(out ListFloat); - binaryReader.ReadValue(out ListDouble); - binaryReader.ReadValue(out ListString); - } - } - - public class SubType : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public int Int32; - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(Int32); - } - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out Int32); - } - } - - public class Test : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public string aa; - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(aa); - } - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out aa); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - } - - public class PhoneNumber : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public Test number; - public int type; - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(number); - binaryWriter.WriteValue(type); - } - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out number); - binaryReader.ReadValue(out type); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - } - - public class Person : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public string Name; - public int id; - public string email; - public List phone; - - - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(Name); - binaryWriter.WriteValue(id); - binaryWriter.WriteValue(email); - binaryWriter.WriteValue(phone); - } - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out Name); - binaryReader.ReadValue(out id); - binaryReader.ReadValue(out email); - binaryReader.ReadValue(out phone); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - } - - public class AddressBook : ProtocolCore.ISerialize, ProtocolCore.IDeserialize - { - public List person; - public List other; - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(person); - binaryWriter.WriteValue(other); - } - - public byte[] Serialize() - { - using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); - Serialize(binaryWriter); - return memoryStream.ToArray(); - } - - public void Deserialize(BinaryReader binaryReader) - { - binaryReader.ReadValue(out person); - binaryReader.ReadValue(out other); - } - - public void Deserialize(byte[] data) - { - using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); - Deserialize(binaryReader); - } - } -} \ No newline at end of file diff --git a/src/writeCs/sample/cs序列化1.jpg b/src/writeCs/sample/cs序列化1.jpg deleted file mode 100644 index 4b56c06..0000000 Binary files a/src/writeCs/sample/cs序列化1.jpg and /dev/null differ diff --git a/src/writeCs/sample/cs序列化2.png b/src/writeCs/sample/cs序列化2.png deleted file mode 100644 index b11a219..0000000 Binary files a/src/writeCs/sample/cs序列化2.png and /dev/null differ diff --git a/test/protoMsg.cs b/test/protoMsg.cs index 5b2d169..f5537e5 100644 --- a/test/protoMsg.cs +++ b/test/protoMsg.cs @@ -3,6 +3,8 @@ using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; +using MiscUtil.Conversion; +using MiscUtil.IO; namespace GenProto { @@ -10,13 +12,13 @@ namespace GenProto { public interface ISerialize { - void Serialize(BinaryWriter binaryWriter); + void Serialize(EndianBinaryWriter binaryWriter); byte[] Serialize(); } public interface IDeserialize { - void Deserialize(BinaryReader binaryReader); + void Deserialize(EndianBinaryReader binaryReader); void Deserialize(byte[] data); } @@ -57,7 +59,7 @@ namespace GenProto }; } - public static void WriteValue(this BinaryWriter binaryWriter, T value) + public static void WriteValue(this EndianBinaryWriter binaryWriter, T value) { switch (value) { @@ -95,11 +97,13 @@ namespace GenProto binaryWriter.Write(doubleValue); break; case string stringValue: - binaryWriter.Write(stringValue); + var bytesLength = (ushort)binaryWriter.Encoding.GetByteCount(stringValue); + binaryWriter.Write(bytesLength); + var bytes = binaryWriter.Encoding.GetBytes(stringValue); + binaryWriter.Write(bytes); break; default: { - binaryWriter.Write(value != null); switch (value) { case IList listValue: @@ -123,97 +127,86 @@ namespace GenProto } - public static void WriteList(this BinaryWriter binaryWriter, IList list) + public static void WriteList(this EndianBinaryWriter binaryWriter, IList list) { - var length = (ushort) (list?.Count ?? 0); + var length = (ushort)(list?.Count ?? 0); binaryWriter.Write(length); if (list == null) return; for (var idx = 0; idx < length; idx++) { var value = list[idx]; - - if (idx == 0) - { - var basicType = JudgeType(value); - binaryWriter.Write((byte) basicType); - } - binaryWriter.WriteValue(value); } } - public static void ReadValue(this BinaryReader binaryReader, out bool value) + public static void ReadValue(this EndianBinaryReader binaryReader, out bool value) { value = binaryReader.ReadBoolean(); } - public static void ReadValue(this BinaryReader binaryReader, out sbyte value) + public static void ReadValue(this EndianBinaryReader binaryReader, out sbyte value) { value = binaryReader.ReadSByte(); } - public static void ReadValue(this BinaryReader binaryReader, out byte value) + public static void ReadValue(this EndianBinaryReader binaryReader, out byte value) { value = binaryReader.ReadByte(); } - public static void ReadValue(this BinaryReader binaryReader, out ushort value) + public static void ReadValue(this EndianBinaryReader binaryReader, out ushort value) { value = binaryReader.ReadUInt16(); } - public static void ReadValue(this BinaryReader binaryReader, out short value) + public static void ReadValue(this EndianBinaryReader binaryReader, out short value) { value = binaryReader.ReadInt16(); } - public static void ReadValue(this BinaryReader binaryReader, out int value) + public static void ReadValue(this EndianBinaryReader binaryReader, out int value) { value = binaryReader.ReadInt32(); } - public static void ReadValue(this BinaryReader binaryReader, out uint value) + public static void ReadValue(this EndianBinaryReader binaryReader, out uint value) { value = binaryReader.ReadUInt32(); } - public static void ReadValue(this BinaryReader binaryReader, out long value) + public static void ReadValue(this EndianBinaryReader binaryReader, out long value) { value = binaryReader.ReadInt64(); } - public static void ReadValue(this BinaryReader binaryReader, out ulong value) + public static void ReadValue(this EndianBinaryReader binaryReader, out ulong value) { value = binaryReader.ReadUInt64(); } - public static void ReadValue(this BinaryReader binaryReader, out float value) + public static void ReadValue(this EndianBinaryReader binaryReader, out float value) { value = binaryReader.ReadSingle(); } - public static void ReadValue(this BinaryReader binaryReader, out double value) + public static void ReadValue(this EndianBinaryReader binaryReader, out double value) { value = binaryReader.ReadDouble(); } - public static void ReadValue(this BinaryReader binaryReader, out string value) + public static void ReadValue(this EndianBinaryReader binaryReader, out string value) { - value = binaryReader.ReadString(); + var bytesLength = binaryReader.ReadUInt16(); + var bytes = binaryReader.ReadBytes(bytesLength); + value = binaryReader.Encoding.GetString(bytes, 0, bytes.Length); } - public static void ReadValue(this BinaryReader binaryReader, out T value) where T : new() + public static void ReadValue(this EndianBinaryReader binaryReader, out T value) where T : new() { value = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } - value = new T(); - if (!(value is IDeserialize deserialize)) + if (value is not IDeserialize deserialize) { throw new InvalidOperationException($"error type: {typeof(T).FullName}"); } @@ -221,15 +214,10 @@ namespace GenProto deserialize.Deserialize(binaryReader); } - public static void ReadValue(this BinaryReader binaryReader, out List outList) where T : new() + public static void ReadValue(this EndianBinaryReader binaryReader, out List outList, BasicTypeEnum basicTypeEnum) where T : new() { outList = default; IList list = default; - var haveValue = binaryReader.ReadBoolean(); - if (!haveValue) - { - return; - } var length = binaryReader.ReadUInt16(); if (length <= 0) @@ -237,7 +225,6 @@ namespace GenProto return; } - var basicTypeEnum = (BasicTypeEnum) binaryReader.ReadByte(); for (var idx = 0; idx < length; idx++) { switch (basicTypeEnum) @@ -304,19 +291,12 @@ namespace GenProto break; case BasicTypeEnum.Custom: list ??= new List(length); - var state = binaryReader.ReadBoolean(); - if (state) - { - if (new T() is IDeserialize item) + if (new T() is IDeserialize item) { item.Deserialize(binaryReader); list.Add(item); } - } - break; - - default: throw new InvalidOperationException(); } @@ -332,7 +312,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -340,10 +320,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(aa); } @@ -361,7 +341,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -369,17 +349,28 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(number); + public void Serialize(EndianBinaryWriter binaryWriter) + { + if (number != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(number); + } + else + { + binaryWriter.WriteValue(0); + } binaryWriter.WriteValue(type); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out number); + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out number); + } binaryReader.ReadValue(out type); } } @@ -394,7 +385,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -402,10 +393,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(name); binaryWriter.WriteValue(id); @@ -417,7 +408,7 @@ namespace GenProto binaryReader.ReadValue(out name); binaryReader.ReadValue(out id); binaryReader.ReadValue(out email); - binaryReader.ReadValue(out phone); + binaryReader.ReadValue(out phone, 0x00); } } public class addressBook : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -429,7 +420,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -437,18 +428,18 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(person); binaryWriter.WriteValue(other); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out person); - binaryReader.ReadValue(out other); + binaryReader.ReadValue(out person, 0x00); + binaryReader.ReadValue(out other, 0x00); } } public class union : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -460,7 +451,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -468,10 +459,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(test); binaryWriter.WriteValue(type); @@ -490,7 +481,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -498,10 +489,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(bool); } @@ -519,7 +510,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -527,10 +518,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -550,7 +541,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -558,10 +549,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -581,7 +572,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -589,10 +580,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -612,7 +603,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -620,10 +611,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -651,7 +642,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -659,10 +650,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -698,7 +689,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -706,10 +697,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -729,7 +720,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -737,10 +728,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -760,7 +751,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -768,10 +759,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -797,7 +788,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -805,30 +796,118 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(int1); - binaryWriter.WriteValue(int2); - binaryWriter.WriteValue(int3); - binaryWriter.WriteValue(int4); - binaryWriter.WriteValue(int5); - binaryWriter.WriteValue(int6); - binaryWriter.WriteValue(int7); - binaryWriter.WriteValue(int8); + public void Serialize(EndianBinaryWriter binaryWriter) + { + if (int1 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int1); + } + else + { + binaryWriter.WriteValue(0); + } + if (int2 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int2); + } + else + { + binaryWriter.WriteValue(0); + } + if (int3 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int3); + } + else + { + binaryWriter.WriteValue(0); + } + if (int4 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int4); + } + else + { + binaryWriter.WriteValue(0); + } + if (int5 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int5); + } + else + { + binaryWriter.WriteValue(0); + } + if (int6 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int6); + } + else + { + binaryWriter.WriteValue(0); + } + if (int7 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int7); + } + else + { + binaryWriter.WriteValue(0); + } + if (int8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int8); + } + else + { + binaryWriter.WriteValue(0); + } } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); - binaryReader.ReadValue(out int2); - binaryReader.ReadValue(out int3); - binaryReader.ReadValue(out int4); - binaryReader.ReadValue(out int5); - binaryReader.ReadValue(out int6); - binaryReader.ReadValue(out int7); - binaryReader.ReadValue(out int8); + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int1); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int2); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int3); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int4); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int5); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int6); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int7); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int8); + } } } public class tnumber : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -848,7 +927,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -856,34 +935,144 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) - { - binaryWriter.WriteValue(int1); - binaryWriter.WriteValue(int2); - binaryWriter.WriteValue(int3); - binaryWriter.WriteValue(int4); - binaryWriter.WriteValue(int5); - binaryWriter.WriteValue(int6); - binaryWriter.WriteValue(int7); - binaryWriter.WriteValue(int8); - binaryWriter.WriteValue(float1); - binaryWriter.WriteValue(float2); + public void Serialize(EndianBinaryWriter binaryWriter) + { + if (int1 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int1); + } + else + { + binaryWriter.WriteValue(0); + } + if (int2 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int2); + } + else + { + binaryWriter.WriteValue(0); + } + if (int3 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int3); + } + else + { + binaryWriter.WriteValue(0); + } + if (int4 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int4); + } + else + { + binaryWriter.WriteValue(0); + } + if (int5 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int5); + } + else + { + binaryWriter.WriteValue(0); + } + if (int6 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int6); + } + else + { + binaryWriter.WriteValue(0); + } + if (int7 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int7); + } + else + { + binaryWriter.WriteValue(0); + } + if (int8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(int8); + } + else + { + binaryWriter.WriteValue(0); + } + if (float1 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(float1); + } + else + { + binaryWriter.WriteValue(0); + } + if (float2 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(float2); + } + else + { + binaryWriter.WriteValue(0); + } } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); - binaryReader.ReadValue(out int2); - binaryReader.ReadValue(out int3); - binaryReader.ReadValue(out int4); - binaryReader.ReadValue(out int5); - binaryReader.ReadValue(out int6); - binaryReader.ReadValue(out int7); - binaryReader.ReadValue(out int8); - binaryReader.ReadValue(out float1); - binaryReader.ReadValue(out float2); + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int1); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int2); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int3); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int4); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int5); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int6); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int7); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out int8); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out float1); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out float2); + } } } public class tfloat : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -895,7 +1084,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -903,10 +1092,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -926,7 +1115,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -934,10 +1123,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -957,7 +1146,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -965,10 +1154,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); binaryWriter.WriteValue(int2); @@ -987,7 +1176,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -995,16 +1184,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x01); } } public class tlistint8 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1015,7 +1204,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1023,16 +1212,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x02); } } public class tlistuint8 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1043,7 +1232,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1051,16 +1240,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x03); } } public class tlistint16 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1071,7 +1260,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1079,16 +1268,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x04); } } public class tlistuint16 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1099,7 +1288,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1107,16 +1296,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x05); } } public class tlistint32 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1127,7 +1316,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1135,16 +1324,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x06); } } public class tlistuint32 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1155,7 +1344,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1163,16 +1352,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x07); } } public class tlistint64 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1183,7 +1372,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1191,16 +1380,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x08); } } public class tlistuint64 : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1211,7 +1400,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1219,16 +1408,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x09); } } public class tlistinteger : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1239,7 +1428,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1247,16 +1436,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x00); } } public class tlistnumber : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1267,7 +1456,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1275,16 +1464,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x00); } } public class tlistfloat : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1295,7 +1484,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1303,16 +1492,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x10); } } public class tlistdouble : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1323,7 +1512,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1331,16 +1520,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x11); } } public class tliststring : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1351,7 +1540,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1359,16 +1548,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x12); } } public class tlistunion : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1379,7 +1568,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1387,16 +1576,16 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(int1); } public void Deserialize(BinaryReader binaryReader) { - binaryReader.ReadValue(out int1); + binaryReader.ReadValue(out int1, 0x00); } } public class allType : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1461,7 +1650,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1469,10 +1658,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(bool); binaryWriter.WriteValue(int8); @@ -1483,29 +1672,181 @@ namespace GenProto binaryWriter.WriteValue(uint32); binaryWriter.WriteValue(int64); binaryWriter.WriteValue(uint64); - binaryWriter.WriteValue(inte8); - binaryWriter.WriteValue(uinte8); - binaryWriter.WriteValue(inte16); - binaryWriter.WriteValue(uinte16); - binaryWriter.WriteValue(inte32); - binaryWriter.WriteValue(uinte32); - binaryWriter.WriteValue(inte64); - binaryWriter.WriteValue(uinte64); - binaryWriter.WriteValue(num8); - binaryWriter.WriteValue(unum8); - binaryWriter.WriteValue(num16); - binaryWriter.WriteValue(unum16); - binaryWriter.WriteValue(num32); - binaryWriter.WriteValue(unum32); - binaryWriter.WriteValue(num64); - binaryWriter.WriteValue(unum64); - binaryWriter.WriteValue(numfloat); - binaryWriter.WriteValue(numdouble); + if (inte8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(inte8); + } + else + { + binaryWriter.WriteValue(0); + } + if (uinte8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(uinte8); + } + else + { + binaryWriter.WriteValue(0); + } + if (inte16 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(inte16); + } + else + { + binaryWriter.WriteValue(0); + } + if (uinte16 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(uinte16); + } + else + { + binaryWriter.WriteValue(0); + } + if (inte32 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(inte32); + } + else + { + binaryWriter.WriteValue(0); + } + if (uinte32 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(uinte32); + } + else + { + binaryWriter.WriteValue(0); + } + if (inte64 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(inte64); + } + else + { + binaryWriter.WriteValue(0); + } + if (uinte64 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(uinte64); + } + else + { + binaryWriter.WriteValue(0); + } + if (num8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(num8); + } + else + { + binaryWriter.WriteValue(0); + } + if (unum8 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(unum8); + } + else + { + binaryWriter.WriteValue(0); + } + if (num16 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(num16); + } + else + { + binaryWriter.WriteValue(0); + } + if (unum16 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(unum16); + } + else + { + binaryWriter.WriteValue(0); + } + if (num32 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(num32); + } + else + { + binaryWriter.WriteValue(0); + } + if (unum32 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(unum32); + } + else + { + binaryWriter.WriteValue(0); + } + if (num64 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(num64); + } + else + { + binaryWriter.WriteValue(0); + } + if (unum64 != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(unum64); + } + else + { + binaryWriter.WriteValue(0); + } + if (numfloat != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(numfloat); + } + else + { + binaryWriter.WriteValue(0); + } + if (numdouble != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(numdouble); + } + else + { + binaryWriter.WriteValue(0); + } binaryWriter.WriteValue(float); binaryWriter.WriteValue(double); binaryWriter.WriteValue(string1); binaryWriter.WriteValue(string2); - binaryWriter.WriteValue(union); + if (union != null) + { + binaryWriter.WriteValue(1); + binaryWriter.WriteValue(union); + } + else + { + binaryWriter.WriteValue(0); + } binaryWriter.WriteValue(lbool); binaryWriter.WriteValue(lint8); binaryWriter.WriteValue(luint8); @@ -1541,52 +1882,109 @@ namespace GenProto binaryReader.ReadValue(out uint32); binaryReader.ReadValue(out int64); binaryReader.ReadValue(out uint64); - binaryReader.ReadValue(out inte8); - binaryReader.ReadValue(out uinte8); - binaryReader.ReadValue(out inte16); - binaryReader.ReadValue(out uinte16); - binaryReader.ReadValue(out inte32); - binaryReader.ReadValue(out uinte32); - binaryReader.ReadValue(out inte64); - binaryReader.ReadValue(out uinte64); - binaryReader.ReadValue(out num8); - binaryReader.ReadValue(out unum8); - binaryReader.ReadValue(out num16); - binaryReader.ReadValue(out unum16); - binaryReader.ReadValue(out num32); - binaryReader.ReadValue(out unum32); - binaryReader.ReadValue(out num64); - binaryReader.ReadValue(out unum64); - binaryReader.ReadValue(out numfloat); - binaryReader.ReadValue(out numdouble); + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out inte8); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out uinte8); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out inte16); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out uinte16); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out inte32); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out uinte32); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out inte64); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out uinte64); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out num8); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out unum8); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out num16); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out unum16); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out num32); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out unum32); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out num64); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out unum64); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out numfloat); + } + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out numdouble); + } binaryReader.ReadValue(out float); binaryReader.ReadValue(out double); binaryReader.ReadValue(out string1); binaryReader.ReadValue(out string2); - binaryReader.ReadValue(out union); - binaryReader.ReadValue(out lbool); - binaryReader.ReadValue(out lint8); - binaryReader.ReadValue(out luint8); - binaryReader.ReadValue(out lint16); - binaryReader.ReadValue(out luint16); - binaryReader.ReadValue(out lint32); - binaryReader.ReadValue(out luint32); - binaryReader.ReadValue(out lint64); - binaryReader.ReadValue(out luint64); - binaryReader.ReadValue(out linte8); - binaryReader.ReadValue(out linte16); - binaryReader.ReadValue(out linte32); - binaryReader.ReadValue(out linte64); - binaryReader.ReadValue(out lnum8); - binaryReader.ReadValue(out lnum16); - binaryReader.ReadValue(out lnum32); - binaryReader.ReadValue(out lnum64); - binaryReader.ReadValue(out lnfloat32); - binaryReader.ReadValue(out lnfloat64); - binaryReader.ReadValue(out lfloat); - binaryReader.ReadValue(out ldouble); - binaryReader.ReadValue(out lstring); - binaryReader.ReadValue(out lunion); + if (binaryReader.ReadBoolean()) + { + binaryReader.ReadValue(out union); + } + binaryReader.ReadValue(out lbool, 0x01); + binaryReader.ReadValue(out lint8, 0x02); + binaryReader.ReadValue(out luint8, 0x03); + binaryReader.ReadValue(out lint16, 0x04); + binaryReader.ReadValue(out luint16, 0x05); + binaryReader.ReadValue(out lint32, 0x06); + binaryReader.ReadValue(out luint32, 0x07); + binaryReader.ReadValue(out lint64, 0x08); + binaryReader.ReadValue(out luint64, 0x09); + binaryReader.ReadValue(out linte8, 0x00); + binaryReader.ReadValue(out linte16, 0x00); + binaryReader.ReadValue(out linte32, 0x00); + binaryReader.ReadValue(out linte64, 0x00); + binaryReader.ReadValue(out lnum8, 0x00); + binaryReader.ReadValue(out lnum16, 0x00); + binaryReader.ReadValue(out lnum32, 0x00); + binaryReader.ReadValue(out lnum64, 0x00); + binaryReader.ReadValue(out lnfloat32, 0x00); + binaryReader.ReadValue(out lnfloat64, 0x00); + binaryReader.ReadValue(out lfloat, 0x10); + binaryReader.ReadValue(out ldouble, 0x11); + binaryReader.ReadValue(out lstring, 0x12); + binaryReader.ReadValue(out lunion, 0x00); } } public class testnull : ProtocolCore.ISerialize, ProtocolCore.IDeserialize @@ -1596,7 +1994,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1604,10 +2002,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { } public void Deserialize(BinaryReader binaryReader) @@ -1625,7 +2023,7 @@ namespace GenProto public byte[] Serialize() { using var memoryStream = new MemoryStream(); - using var binaryWriter = new BinaryWriter(memoryStream); + using var binaryWriter = new EndianBinaryWriter(EndianBitConverter.Big, memoryStream); Serialize(binaryWriter); return memoryStream.ToArray(); } @@ -1633,10 +2031,10 @@ namespace GenProto public void Deserialize(byte[] data) { using var memoryStream = new MemoryStream(data); - using var binaryReader = new BinaryReader(memoryStream); + using var binaryReader = new EndianBinaryReader(EndianBitConverter.Big, memoryStream); Deserialize(binaryReader); } - public void Serialize(BinaryWriter binaryWriter) + public void Serialize(EndianBinaryWriter binaryWriter) { binaryWriter.WriteValue(name); binaryWriter.WriteValue(id); @@ -1648,7 +2046,7 @@ namespace GenProto binaryReader.ReadValue(out name); binaryReader.ReadValue(out id); binaryReader.ReadValue(out email); - binaryReader.ReadValue(out phone); + binaryReader.ReadValue(out phone, 0x00); } } } \ No newline at end of file