diff --git a/src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj b/src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj index 39267b4..75f0f94 100644 --- a/src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj +++ b/src/JTActiveSafety.Protocol.Test/JTActiveSafety.Protocol.Test.csproj @@ -15,4 +15,8 @@ + + + + diff --git a/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs b/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs new file mode 100644 index 0000000..a92bb6d --- /dev/null +++ b/src/JTActiveSafety.Protocol.Test/JTActiveSafetySerializerTest.cs @@ -0,0 +1,40 @@ +using System; +using Xunit; +using JTActiveSafety.Protocol; +using JTActiveSafety.Protocol.Extensions; + +namespace JTActiveSafety.Protocol.Test +{ + public class JTActiveSafetySerializerTest + { + [Fact] + public void SerializeTest1() + { + JTActiveSafetyPackage package = new JTActiveSafetyPackage(); + package.FileName = "alarm.xlsx"; + package.Offset = 1; + package.Bodies = new byte[5] { 1, 2, 3, 4, 5 }; + var hex = JTActiveSafetySerializer.Serialize(package).ToHexString(); + Assert.Equal("3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405", hex); + } + + [Fact] + public void DeserializeTest1() + { + var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes(); + var package = JTActiveSafetySerializer.Deserialize(data); + Assert.Equal(JTActiveSafetyPackage.FH, package.FH_Flag); + Assert.Equal("alarm.xlsx", package.FileName.TrimStart('\0')); + Assert.Equal(1u, package.Offset); + Assert.Equal(5u, package.Length); + Assert.Equal(new byte[5] { 1, 2, 3, 4, 5 }, package.Bodies); + } + + [Fact] + public void AnalyzeTest1() + { + var data = "3031636400000000000000000000000000000000000000000000000000000000000000000000000000000000616C61726D2E786C737800000001000000050102030405".ToHexBytes(); + var json = JTActiveSafetySerializer.Analyze(data); + } + } +} diff --git a/src/JTActiveSafety.Protocol.Test/UnitTest1.cs b/src/JTActiveSafety.Protocol.Test/UnitTest1.cs deleted file mode 100644 index d2308e8..0000000 --- a/src/JTActiveSafety.Protocol.Test/UnitTest1.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Xunit; - -namespace JTActiveSafety.Protocol.Test -{ - public class UnitTest1 - { - [Fact] - public void Test1() - { - - } - } -} diff --git a/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.csproj b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.csproj index 4cb48a3..c63c67e 100644 --- a/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.csproj +++ b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.csproj @@ -15,9 +15,17 @@ https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE false - 1.0.0 + 1.0.0-preview1 LICENSE + + + JTActiveSafety.Protocol.xml + + + + JTActiveSafety.Protocol.xml + diff --git a/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml new file mode 100644 index 0000000..b8694f0 --- /dev/null +++ b/src/JTActiveSafety.Protocol/JTActiveSafety.Protocol.xml @@ -0,0 +1,77 @@ + + + + JTActiveSafety.Protocol + + + + + + + + + + + ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t" + + + + + 16进制字符串转16进制数组 + + + + + + + + 帧头标识 + + + + + 帧头标识 + + + + + 帧头标识 + 固定为0x30 0x31 0x63 0x64 + + + + + 文件名称 + + + + + 数据偏移量 + + + + + 数据长度 + + + + + 数据体 + 默认长度64K,文件小于64K 则为实际长度 + + + + + 数字编码 大端模式、高位在前 + + + + + + 数字编码 大端模式、高位在前 + + + + + + diff --git a/src/JTActiveSafety.Protocol/JTActiveSafetySerializer.cs b/src/JTActiveSafety.Protocol/JTActiveSafetySerializer.cs index 4751de2..dd93894 100644 --- a/src/JTActiveSafety.Protocol/JTActiveSafetySerializer.cs +++ b/src/JTActiveSafety.Protocol/JTActiveSafetySerializer.cs @@ -19,7 +19,7 @@ namespace JTActiveSafety.Protocol { JTActiveSafetyMessagePackWriter writer = new JTActiveSafetyMessagePackWriter(buffer); writer.WriteUInt32(package.FH_Flag); - writer.WriteString(package.FileName); + writer.WriteString(package.FileName.PadLeft(50, '\0')); writer.WriteUInt32(package.Offset); writer.WriteUInt32((uint)package.Bodies.Length); writer.WriteArray(package.Bodies); @@ -51,13 +51,13 @@ namespace JTActiveSafety.Protocol { writer.WriteStartObject(); var header = reader.ReadUInt32(); - writer.WriteString($"[{header}]头部", header.ReadNumber()); + writer.WriteNumber($"[{ header.ReadNumber()}]头部", header); var FileName = reader.ReadString(50); writer.WriteString($"[文件名称]", FileName); var offset = reader.ReadUInt32(); - writer.WriteNumber($"{offset}[数据偏移量]", offset); + writer.WriteNumber($"{offset.ReadNumber()}[数据偏移量]", offset); var length = reader.ReadUInt32(); - writer.WriteNumber($"{length}[数据长度]", length); + writer.WriteNumber($"{length.ReadNumber()}[数据长度]", length); var bodies = reader.ReadRemainArray().ToArray(); writer.WriteString("[数据体]", string.Join(" ", (bodies).Select(p => p.ToString("X2")))); writer.WriteEndObject();