From ac03198716bc43f7a57beeca520e56c8877a0f61 Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Fri, 21 Sep 2018 14:33:32 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A00x9005|0x9006|0x9007|0x9008?= =?UTF-8?q?=E6=B6=88=E6=81=AF=202.=E5=A2=9E=E5=8A=A00x9007|0x9008=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++ .../JT809MessageBody/JT809_0x9007Test.cs | 30 +++++++++++++++++++ .../JT809MessageBody/JT809_0x9008Test.cs | 30 +++++++++++++++++++ src/JT809.Protocol/JT809.Protocol.csproj | 2 ++ .../JT809Enums/JT809BusinessType.cs | 4 +++ .../JT809Enums/JT809_0x9007_ReasonCode.cs | 16 ++++++++++ .../JT809Enums/JT809_0x9008_ReasonCode.cs | 15 ++++++++++ .../JT809_0x9007Formatter.cs | 27 +++++++++++++++++ .../JT809_0x9008Formatter.cs | 27 +++++++++++++++++ .../JT809MessageBody/JT809_0x9005.cs | 19 ++++++++++++ .../JT809MessageBody/JT809_0x9006.cs | 18 +++++++++++ .../JT809MessageBody/JT809_0x9007.cs | 29 ++++++++++++++++++ .../JT809MessageBody/JT809_0x9008.cs | 22 ++++++++++++++ 13 files changed, 243 insertions(+) create mode 100644 src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9007Test.cs create mode 100644 src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9008Test.cs create mode 100644 src/JT809.Protocol/JT809Enums/JT809_0x9007_ReasonCode.cs create mode 100644 src/JT809.Protocol/JT809Enums/JT809_0x9008_ReasonCode.cs create mode 100644 src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9007Formatter.cs create mode 100644 src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9008Formatter.cs create mode 100644 src/JT809.Protocol/JT809MessageBody/JT809_0x9005.cs create mode 100644 src/JT809.Protocol/JT809MessageBody/JT809_0x9006.cs create mode 100644 src/JT809.Protocol/JT809MessageBody/JT809_0x9007.cs create mode 100644 src/JT809.Protocol/JT809MessageBody/JT809_0x9008.cs diff --git a/README.md b/README.md index 54696e1..61c78a4 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,10 @@ | 10 | 0x9002 | √ | 从链路连接应答消息 | | 11 | 0x9003 | √ | 从链路注销请求消息 | | 12 | 0x9004 | √ | 从链路注销应答消息 | +| 13 | 0x9005 | √ | 从链路连接保持请求消息 | +| 14 | 0x9006 | √ | 从链路连接保持应答消息 | +| 15 | 0x9007 | √ | 从链路断开通知消息 | +| 16 | 0x9008 | √ | 上级平台主动关闭链路通知消息 | diff --git a/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9007Test.cs b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9007Test.cs new file mode 100644 index 0000000..cede3b8 --- /dev/null +++ b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9007Test.cs @@ -0,0 +1,30 @@ +using JT809.Protocol; +using JT809.Protocol.JT809Extensions; +using JT809.Protocol.JT809MessageBody; +using JT809.Protocol.JT809Exceptions; +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace JT809.Protocol.Test.JT809MessageBody +{ + public class JT809_0x9007Test + { + [Fact] + public void Test1() + { + JT809_0x9007 jT809_0X9007 = new JT809_0x9007(); + jT809_0X9007.ReasonCode = JT809Enums.JT809_0x9007_ReasonCode.无法连接下级平台指定的服务IP与端口; + var hex = JT809Serializer.Serialize(jT809_0X9007).ToHexString(); + } + + [Fact] + public void Test2() + { + var bytes = "00".ToHexBytes(); + JT809_0x9007 jT809_0X9007 = JT809Serializer.Deserialize(bytes); + Assert.Equal(JT809Enums.JT809_0x9007_ReasonCode.无法连接下级平台指定的服务IP与端口, jT809_0X9007.ReasonCode); + } + } +} diff --git a/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9008Test.cs b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9008Test.cs new file mode 100644 index 0000000..40474b3 --- /dev/null +++ b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x9008Test.cs @@ -0,0 +1,30 @@ +using JT809.Protocol; +using JT809.Protocol.JT809Extensions; +using JT809.Protocol.JT809MessageBody; +using JT809.Protocol.JT809Exceptions; +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace JT809.Protocol.Test.JT809MessageBody +{ + public class JT809_0x9008Test + { + [Fact] + public void Test1() + { + JT809_0x9008 jT809_0X9008 = new JT809_0x9008(); + jT809_0X9008.ReasonCode = JT809Enums.JT809_0x9008_ReasonCode.其它原因; + var hex = JT809Serializer.Serialize(jT809_0X9008).ToHexString(); + } + + [Fact] + public void Test2() + { + var bytes = "01".ToHexBytes(); + JT809_0x9008 jT809_0X9008 = JT809Serializer.Deserialize(bytes); + Assert.Equal(JT809Enums.JT809_0x9008_ReasonCode.其它原因, jT809_0X9008.ReasonCode); + } + } +} diff --git a/src/JT809.Protocol/JT809.Protocol.csproj b/src/JT809.Protocol/JT809.Protocol.csproj index 97b0a72..89ab3f6 100644 --- a/src/JT809.Protocol/JT809.Protocol.csproj +++ b/src/JT809.Protocol/JT809.Protocol.csproj @@ -39,8 +39,10 @@ + + diff --git a/src/JT809.Protocol/JT809Enums/JT809BusinessType.cs b/src/JT809.Protocol/JT809Enums/JT809BusinessType.cs index 6bfb32c..39697b0 100644 --- a/src/JT809.Protocol/JT809Enums/JT809BusinessType.cs +++ b/src/JT809.Protocol/JT809Enums/JT809BusinessType.cs @@ -89,21 +89,25 @@ namespace JT809.Protocol.JT809Enums ///从链路连接保持请求消息 /// [Description("从链路连接保持请求消息")] + [JT809BodiesType(typeof(JT809_0x9005))] DOWN_LINKTEST_REQ = 0x9005, /// ///从链路连接保持应答消息 /// [Description("从链路连接保持应答消息")] + [JT809BodiesType(typeof(JT809_0x9006))] DOWN_LINKTEST_RSP = 0x9006, /// ///从链路断开通知消息 /// [Description("从链路断开通知消息")] + [JT809BodiesType(typeof(JT809_0x9007))] DOWN_DISCONNECT_INFORM = 0x9007, /// ///上级平台主动关闭链路通知消息 /// [Description("上级平台主动关闭链路通知消息")] + [JT809BodiesType(typeof(JT809_0x9008))] DOWN_CLOSELINK_INFORM = 0x9008, #endregion #region 信息统计类 diff --git a/src/JT809.Protocol/JT809Enums/JT809_0x9007_ReasonCode.cs b/src/JT809.Protocol/JT809Enums/JT809_0x9007_ReasonCode.cs new file mode 100644 index 0000000..a9c973c --- /dev/null +++ b/src/JT809.Protocol/JT809Enums/JT809_0x9007_ReasonCode.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809Enums +{ + /// + /// 错误代码 + /// + public enum JT809_0x9007_ReasonCode : byte + { + 无法连接下级平台指定的服务IP与端口 = 0x00, + 级平台客户端与下级平台服务端断开 = 0x01, + 其他原因=0x02 + } +} diff --git a/src/JT809.Protocol/JT809Enums/JT809_0x9008_ReasonCode.cs b/src/JT809.Protocol/JT809Enums/JT809_0x9008_ReasonCode.cs new file mode 100644 index 0000000..2782428 --- /dev/null +++ b/src/JT809.Protocol/JT809Enums/JT809_0x9008_ReasonCode.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809Enums +{ + /// + /// 错误代码 + /// + public enum JT809_0x9008_ReasonCode:byte + { + 网关重启=0x00, + 其它原因=0x01 + } +} diff --git a/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9007Formatter.cs b/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9007Formatter.cs new file mode 100644 index 0000000..fb36a01 --- /dev/null +++ b/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9007Formatter.cs @@ -0,0 +1,27 @@ +using JT809.Protocol.JT809Extensions; +using JT809.Protocol.JT809MessageBody; +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809Formatters.JT809MessageBodyFormatters +{ + public class JT809_0x9007Formatter : IJT809Formatter + { + public JT809_0x9007 Deserialize(ReadOnlySpan bytes, out int readSize) + { + int offset = 0; + JT809_0x9007 jT809_0X9007 = new JT809_0x9007(); + jT809_0X9007.ReasonCode = (JT809Enums.JT809_0x9007_ReasonCode)JT809BinaryExtensions.ReadByteLittle(bytes, ref offset); + readSize = offset; + return jT809_0X9007; + } + + public int Serialize(IMemoryOwner memoryOwner, int offset, JT809_0x9007 value) + { + offset += JT809BinaryExtensions.WriteByteLittle(memoryOwner, offset,(byte)value.ReasonCode); + return offset; + } + } +} diff --git a/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9008Formatter.cs b/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9008Formatter.cs new file mode 100644 index 0000000..919c883 --- /dev/null +++ b/src/JT809.Protocol/JT809Formatters/JT809MessageBodyFormatters/JT809_0x9008Formatter.cs @@ -0,0 +1,27 @@ +using JT809.Protocol.JT809Extensions; +using JT809.Protocol.JT809MessageBody; +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809Formatters.JT809MessageBodyFormatters +{ + public class JT809_0x9008Formatter : IJT809Formatter + { + public JT809_0x9008 Deserialize(ReadOnlySpan bytes, out int readSize) + { + int offset = 0; + JT809_0x9008 jT809_0X9008 = new JT809_0x9008(); + jT809_0X9008.ReasonCode = (JT809Enums.JT809_0x9008_ReasonCode)JT809BinaryExtensions.ReadByteLittle(bytes, ref offset); + readSize = offset; + return jT809_0X9008; + } + + public int Serialize(IMemoryOwner memoryOwner, int offset, JT809_0x9008 value) + { + offset += JT809BinaryExtensions.WriteByteLittle(memoryOwner, offset, (byte)value.ReasonCode); + return offset; + } + } +} diff --git a/src/JT809.Protocol/JT809MessageBody/JT809_0x9005.cs b/src/JT809.Protocol/JT809MessageBody/JT809_0x9005.cs new file mode 100644 index 0000000..d60e56a --- /dev/null +++ b/src/JT809.Protocol/JT809MessageBody/JT809_0x9005.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809MessageBody +{ + /// + /// 从链路连接保持请求消息 + /// 链路类型:从链路 + /// 消息方向:上级平台往下级平台 + /// 业务数据类型标识:DOWN_LINKTEST_REQ + /// 描述:从链路建立成功后,上级平台向下级平台发送从链路连接保持请求消息,以保持从链路的连接状态 + /// 从链路连接保持请求消息,数据体为空 + /// + public class JT809_0x9005:JT809Bodies + { + + } +} diff --git a/src/JT809.Protocol/JT809MessageBody/JT809_0x9006.cs b/src/JT809.Protocol/JT809MessageBody/JT809_0x9006.cs new file mode 100644 index 0000000..bdf0967 --- /dev/null +++ b/src/JT809.Protocol/JT809MessageBody/JT809_0x9006.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809MessageBody +{ + /// + /// 从链路连接保持应答消息 + /// 链路类型:从链路 + /// 消息方向:上级平台往下级平台 + /// 业务数据类型标识:DOWN_LINKTEST_REP + /// 描述:下级平台收到上级平台链路连接保持请求消息后,向上级平台返回从链路连接保持应答消息,保持从链路连接状态 + /// 从链路连接保持应答消息,数据体为空 + /// + public class JT809_0x9006:JT809Bodies + { + } +} diff --git a/src/JT809.Protocol/JT809MessageBody/JT809_0x9007.cs b/src/JT809.Protocol/JT809MessageBody/JT809_0x9007.cs new file mode 100644 index 0000000..04e4c3c --- /dev/null +++ b/src/JT809.Protocol/JT809MessageBody/JT809_0x9007.cs @@ -0,0 +1,29 @@ +using JT809.Protocol.JT809Attributes; +using JT809.Protocol.JT809Enums; +using JT809.Protocol.JT809Formatters.JT809MessageBodyFormatters; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809MessageBody +{ + /// + /// 从链路断开通知消息 + /// 链路类型:主链路 + /// 消息方向:上级平台往下级平台 + /// 业务数据类型标识:DOWN_DISCONNECT_INFORM + /// 描述: + /// 情景 1:上级平台与下级平台的从链路中断后,重连二次仍未成功时,上级平台通过主链路发送本消息给下级平台。 + /// 情景 2:上级平台作为客户端向下级平台登录时,根据之前收到的 IP 地址及端口无法连接到下级平台服务端时发送本消息通知下级平台。 + /// + /// 本条消息无需被通知方应答 + /// + [JT809Formatter(typeof(JT809_0x9007Formatter))] + public class JT809_0x9007:JT809Bodies + { + /// + /// 错误代码 + /// + public JT809_0x9007_ReasonCode ReasonCode { get; set; } + } +} diff --git a/src/JT809.Protocol/JT809MessageBody/JT809_0x9008.cs b/src/JT809.Protocol/JT809MessageBody/JT809_0x9008.cs new file mode 100644 index 0000000..6f5c43c --- /dev/null +++ b/src/JT809.Protocol/JT809MessageBody/JT809_0x9008.cs @@ -0,0 +1,22 @@ +using JT809.Protocol.JT809Attributes; +using JT809.Protocol.JT809Enums; +using JT809.Protocol.JT809Formatters.JT809MessageBodyFormatters; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.JT809MessageBody +{ + /// + /// 上级平台主动关闭链路通知消息 + /// 业务数据类型标识:DOWN_CLOSELINK_INFORM + /// + [JT809Formatter(typeof(JT809_0x9008Formatter))] + public class JT809_0x9008:JT809Bodies + { + /// + /// 错误代码 + /// + public JT809_0x9008_ReasonCode ReasonCode { get; set; } + } +}