@@ -15,4 +15,8 @@ | |||||
</PackageReference> | </PackageReference> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | |||||
<ProjectReference Include="..\JTActiveSafety.Protocol\JTActiveSafety.Protocol.csproj" /> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -1,14 +0,0 @@ | |||||
using System; | |||||
using Xunit; | |||||
namespace JTActiveSafety.Protocol.Test | |||||
{ | |||||
public class UnitTest1 | |||||
{ | |||||
[Fact] | |||||
public void Test1() | |||||
{ | |||||
} | |||||
} | |||||
} |
@@ -15,9 +15,17 @@ | |||||
<licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl> | <licenseUrl>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</licenseUrl> | ||||
<license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license> | <license>https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE</license> | ||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | ||||
<Version>1.0.0</Version> | |||||
<Version>1.0.0-preview1</Version> | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.0|AnyCPU'"> | |||||
<DocumentationFile>JTActiveSafety.Protocol.xml</DocumentationFile> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|netstandard2.0|AnyCPU'"> | |||||
<DocumentationFile>JTActiveSafety.Protocol.xml</DocumentationFile> | |||||
</PropertyGroup> | |||||
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> | <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> | ||||
<PackageReference Include="System.Memory" Version="4.5.4" /> | <PackageReference Include="System.Memory" Version="4.5.4" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -0,0 +1,77 @@ | |||||
<?xml version="1.0"?> | |||||
<doc> | |||||
<assembly> | |||||
<name>JTActiveSafety.Protocol</name> | |||||
</assembly> | |||||
<members> | |||||
<member name="T:JTActiveSafety.Protocol.Buffers.JTActiveSafetyBufferWriter"> | |||||
<summary> | |||||
<see cref="!:System.Buffers.Writer"/> | |||||
</summary> | |||||
</member> | |||||
<member name="T:JTActiveSafety.Protocol.Extensions.HexExtensions"> | |||||
<summary> | |||||
ref:"www.codeproject.com/tips/447938/high-performance-csharp-byte-array-to-hex-string-t" | |||||
</summary> | |||||
</member> | |||||
<member name="M:JTActiveSafety.Protocol.Extensions.HexExtensions.ToHexBytes(System.String)"> | |||||
<summary> | |||||
16进制字符串转16进制数组 | |||||
</summary> | |||||
<param name="hexString"></param> | |||||
<param name="separator"></param> | |||||
<returns></returns> | |||||
</member> | |||||
<member name="F:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH_Bytes"> | |||||
<summary> | |||||
帧头标识 | |||||
</summary> | |||||
</member> | |||||
<member name="F:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH"> | |||||
<summary> | |||||
帧头标识 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.FH_Flag"> | |||||
<summary> | |||||
帧头标识 | |||||
固定为0x30 0x31 0x63 0x64 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.FileName"> | |||||
<summary> | |||||
文件名称 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Offset"> | |||||
<summary> | |||||
数据偏移量 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Length"> | |||||
<summary> | |||||
数据长度 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JTActiveSafety.Protocol.JTActiveSafetyPackage.Bodies"> | |||||
<summary> | |||||
数据体 | |||||
默认长度64K,文件小于64K 则为实际长度 | |||||
</summary> | |||||
</member> | |||||
<member name="M:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackReader.ReadBigNumber(System.Int32)"> | |||||
<summary> | |||||
数字编码 大端模式、高位在前 | |||||
</summary> | |||||
<param name="len"></param> | |||||
</member> | |||||
<member name="M:JTActiveSafety.Protocol.MessagePack.JTActiveSafetyMessagePackWriter.WriteBigNumber(System.String,System.Int32)"> | |||||
<summary> | |||||
数字编码 大端模式、高位在前 | |||||
</summary> | |||||
<param name="value"></param> | |||||
<param name="len"></param> | |||||
</member> | |||||
</members> | |||||
</doc> |
@@ -19,7 +19,7 @@ namespace JTActiveSafety.Protocol | |||||
{ | { | ||||
JTActiveSafetyMessagePackWriter writer = new JTActiveSafetyMessagePackWriter(buffer); | JTActiveSafetyMessagePackWriter writer = new JTActiveSafetyMessagePackWriter(buffer); | ||||
writer.WriteUInt32(package.FH_Flag); | writer.WriteUInt32(package.FH_Flag); | ||||
writer.WriteString(package.FileName); | |||||
writer.WriteString(package.FileName.PadLeft(50, '\0')); | |||||
writer.WriteUInt32(package.Offset); | writer.WriteUInt32(package.Offset); | ||||
writer.WriteUInt32((uint)package.Bodies.Length); | writer.WriteUInt32((uint)package.Bodies.Length); | ||||
writer.WriteArray(package.Bodies); | writer.WriteArray(package.Bodies); | ||||
@@ -51,13 +51,13 @@ namespace JTActiveSafety.Protocol | |||||
{ | { | ||||
writer.WriteStartObject(); | writer.WriteStartObject(); | ||||
var header = reader.ReadUInt32(); | var header = reader.ReadUInt32(); | ||||
writer.WriteString($"[{header}]头部", header.ReadNumber()); | |||||
writer.WriteNumber($"[{ header.ReadNumber()}]头部", header); | |||||
var FileName = reader.ReadString(50); | var FileName = reader.ReadString(50); | ||||
writer.WriteString($"[文件名称]", FileName); | writer.WriteString($"[文件名称]", FileName); | ||||
var offset = reader.ReadUInt32(); | var offset = reader.ReadUInt32(); | ||||
writer.WriteNumber($"{offset}[数据偏移量]", offset); | |||||
writer.WriteNumber($"{offset.ReadNumber()}[数据偏移量]", offset); | |||||
var length = reader.ReadUInt32(); | var length = reader.ReadUInt32(); | ||||
writer.WriteNumber($"{length}[数据长度]", length); | |||||
writer.WriteNumber($"{length.ReadNumber()}[数据长度]", length); | |||||
var bodies = reader.ReadRemainArray().ToArray(); | var bodies = reader.ReadRemainArray().ToArray(); | ||||
writer.WriteString("[数据体]", string.Join(" ", (bodies).Select(p => p.ToString("X2")))); | writer.WriteString("[数据体]", string.Join(" ", (bodies).Select(p => p.ToString("X2")))); | ||||
writer.WriteEndObject(); | writer.WriteEndObject(); | ||||