diff --git a/README.md b/README.md index 92b11a8..73bdce6 100644 --- a/README.md +++ b/README.md @@ -192,25 +192,35 @@ JT809GlobalConfig.Instance.SetHeaderOptions(new JT809HeaderOptions }); // 根据业务类型创建对应包 -JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create(new JT809_0x9400 -{ - VehicleNo = "粤A12345", - VehicleColor = JT809VehicleColorType.黄色, - SubBusinessType = JT809SubBusinessType.报警督办请求消息, - JT809SubBodies = new JT809_0x9400_0x9401 +JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create_从链路报警信息交互消息( + new JT809Header + { + MsgSN = 1666, + EncryptKey = 9999, + EncryptFlag = JT809Header_Encrypt.None, + Version = new JT809Header_Version(1, 0, 0), + MsgGNSSCENTERID = 20180920, + }, new JT809_0x9400 { - WarnSrc = JT809WarnSrc.车载终端, - WarnType = JT809WarnType.疲劳驾驶报警, - WarnTime = DateTime.Parse("2018-09-27 10:24:00"), - SupervisionID = "123FFAA1", - SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"), - SupervisionLevel = 3, - Supervisor = "smallchi", - SupervisorTel = "12345678901", - SupervisorEmail = "123456@qq.com" + VehicleNo = "粤A12345", + VehicleColor = JT809VehicleColorType.黄色, + SubBusinessType = JT809SubBusinessType.报警督办请求, + SubBodies = JT809SubBusinessType.报警督办请求.Create_报警督办请求( + new JT809_0x9400_0x9401 + { + WarnSrc = JT809WarnSrc.车载终端, + WarnType = JT809WarnType.疲劳驾驶报警, + WarnTime = DateTime.Parse("2018-09-27 10:24:00"), + SupervisionID = "123FFAA1", + SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"), + SupervisionLevel = 3, + Supervisor = "smallchi", + SupervisorTel = "12345678901", + SupervisorEmail = "123456@qq.com" + }) } -}); -var hex = JT809Serializer.Serialize(jT809Package); +); +var hex = JT809Serializer.Serialize(jT809Package).ToHexString(); ``` ### 举个栗子3 @@ -296,29 +306,29 @@ static async Task Main(string[] args) ``` ini -BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.472 (1803/April2018Update/Redstone4) +BenchmarkDotNet=v0.11.5, OS=Windows 10.0.17763.379 (1809/October2018Update/Redstone5) Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores - [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0 - Job-FVMQGI : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3260.0 - Job-LGLQDK : .NET Core 2.2.1 (CoreCLR 4.6.27207.03, CoreFX 4.6.27207.03), 64bit RyuJIT + [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3362.0 + Job-FVMQGI : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3362.0 + Job-LGLQDK : .NET Core 2.2.5 (CoreCLR 4.6.27617.05, CoreFX 4.6.27618.01), 64bit RyuJIT Platform=AnyCpu Runtime=Clr Server=False ``` -| Method | Toolchain | N | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op | -|---------------------------------------- |-------------- |------- |-------------:|-----------:|-----------:|------------:|------------:|------------:|--------------------:| -| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100** | **3.401 ms** | **0.0665 ms** | **0.0792 ms** | **70.3125** | **-** | **-** | **447.72 KB** | -| JT809_0x9400_0x9401_Package_Serialize | Default | 100 | 3.809 ms | 0.0633 ms | 0.0592 ms | 74.2188 | - | - | 460.91 KB | -| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100 | 2.571 ms | 0.0456 ms | 0.0427 ms | 62.5000 | - | - | 403.5 KB | -| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100 | 2.830 ms | 0.0324 ms | 0.0271 ms | 66.4063 | - | - | 408.27 KB | -| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **10000** | **339.987 ms** | **4.6700 ms** | **4.3683 ms** | **7000.0000** | **-** | **-** | **44784.51 KB** | -| JT809_0x9400_0x9401_Package_Serialize | Default | 10000 | 381.159 ms | 7.0290 ms | 6.5749 ms | 7000.0000 | - | - | 46096.55 KB | -| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 10000 | 251.317 ms | 4.9186 ms | 4.6009 ms | 6000.0000 | - | - | 40374.08 KB | -| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 10000 | 280.964 ms | 4.4244 ms | 3.6946 ms | 6000.0000 | - | - | 40837.81 KB | -| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100000** | **3,415.104 ms** | **66.8704 ms** | **68.6710 ms** | **72000.0000** | **-** | **-** | **447679.84 KB** | -| JT809_0x9400_0x9401_Package_Serialize | Default | 100000 | 3,866.718 ms | 26.2001 ms | 23.2257 ms | 75000.0000 | - | - | 460885.07 KB | -| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100000 | 2,549.544 ms | 23.0695 ms | 20.4505 ms | 65000.0000 | - | - | 403220.45 KB | -| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100000 | 2,747.892 ms | 36.6155 ms | 34.2502 ms | 66000.0000 | - | - | 407869.06 KB | +| Method | Toolchain | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | +|---------------------------------------- |-------------- |------- |-------------:|--------------:|--------------:|-----------:|------:|------:|-------------:| +| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100** | **203.8 us** | **0.5634 us** | **0.4995 us** | **21.9727** | **-** | **-** | **135.16 KB** | +| JT809_0x9400_0x9401_Package_Serialize | Default | 100 | 321.9 us | 1.4627 us | 1.2967 us | 20.5078 | - | - | 128.91 KB | +| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100 | 142.8 us | 0.5950 us | 0.5274 us | 21.9727 | - | - | 135.16 KB | +| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100 | 195.8 us | 0.6448 us | 0.5716 us | 20.7520 | - | - | 128.91 KB | +| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **10000** | **21,072.4 us** | **38.5387 us** | **32.1815 us** | **2187.5000** | **-** | **-** | **13515.94 KB** | +| JT809_0x9400_0x9401_Package_Serialize | Default | 10000 | 31,782.0 us | 117.6549 us | 91.8572 us | 2062.5000 | - | - | 12891.23 KB | +| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 10000 | 14,103.7 us | 39.9789 us | 35.4402 us | 2187.5000 | - | - | 13515.63 KB | +| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 10000 | 19,754.9 us | 63.4952 us | 56.2868 us | 2093.7500 | - | - | 12890.63 KB | +| **JT809_0x9400_0x9401_Package_Deserialize** | **Default** | **100000** | **210,655.4 us** | **702.2667 us** | **586.4245 us** | **21666.6667** | **-** | **-** | **135159.23 KB** | +| JT809_0x9400_0x9401_Package_Serialize | Default | 100000 | 318,362.4 us | 1,623.0459 us | 1,518.1981 us | 20000.0000 | - | - | 128914.17 KB | +| JT809_0x9400_0x9401_Package_Deserialize | .NET Core 2.2 | 100000 | 142,826.0 us | 611.7525 us | 572.2337 us | 21750.0000 | - | - | 135156.25 KB | +| JT809_0x9400_0x9401_Package_Serialize | .NET Core 2.2 | 100000 | 198,473.8 us | 585.6268 us | 519.1429 us | 20666.6667 | - | - | 128906.25 KB | ## JT809协议消息对照表 diff --git a/src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj b/src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj index de8359d..417a34d 100644 --- a/src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj +++ b/src/JT809.Protocol.Benchmark/JT809.Protocol.Benchmark.csproj @@ -6,9 +6,9 @@ - + - + diff --git a/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj b/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj index 1d19415..5bce2a0 100644 --- a/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj +++ b/src/JT809.Protocol.Extensions.DependencyInjection/JT809.Protocol.Extensions.DependencyInjection.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT809 https://github.com/SmallChi/JT809 - https://github.com/SmallChi/JT809/blob/master/LICENSE + https://github.com/SmallChi/JT809/blob/master/LICENSE true - 1.2.1 + 1.3.0 diff --git a/src/JT809.Protocol.Test/JT809Extensions/JT809SubPackageExtensionsTest.cs b/src/JT809.Protocol.Test/JT809Extensions/JT809SubPackageExtensionsTest.cs new file mode 100644 index 0000000..3f091f4 --- /dev/null +++ b/src/JT809.Protocol.Test/JT809Extensions/JT809SubPackageExtensionsTest.cs @@ -0,0 +1,90 @@ +using JT809.Protocol.Attributes; +using JT809.Protocol.Enums; +using JT809.Protocol.Extensions; +using JT809.Protocol.MessageBody; +using JT809.Protocol.SubMessageBody; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Xunit; + +namespace JT809.Protocol.Test.JT809Extensions +{ + public class JT809SubPackageExtensionsTest + { + [Fact] + public void Test1() + { + var types = Enum.GetNames(typeof(JT809SubBusinessType)); + foreach (var item in types) + { + JT809SubBusinessType jT809SubBusinessType = item.ToEnum(); + JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809SubBusinessType.GetAttribute(); + JT809SubBusinessTypeDescriptionAttribute jT809SubBusinessTypeDescriptionAttribute = jT809SubBusinessType.GetAttribute(); + if (jT809SubBusinessType == JT809SubBusinessType.None) + { + Assert.Null(jT809SubBodiesTypeAttribute); + Assert.Null(jT809SubBusinessTypeDescriptionAttribute); + continue; + } + Assert.NotNull(jT809SubBusinessTypeDescriptionAttribute.Code); + Assert.NotNull(jT809SubBusinessTypeDescriptionAttribute.Name); + } + } + + [Fact] + public void Create_0x1001_Test() + { + JT809Package jT809Package= JT809BusinessType.主链路登录请求消息.Create_主链路登录请求消息(new JT809Header + { + MsgSN = 133, + EncryptKey = 9999, + MsgGNSSCENTERID = 20180920, + }, new MessageBody.JT809_0x1001 + { + UserId = 20180920, + Password = "20180920", + DownLinkIP = "127.0.0.1", + DownLinkPort = 809 + }); + var hex = JT809Serializer.Serialize(jT809Package).ToHexString(); + Assert.Equal("5B000000480000008510010133EFB8010000000000270F0133EFB832303138303932303132372E302E302E31000000000000000000000000000000000000000000000003296A915D", hex); + } + + [Fact] + public void Create_JT809_0x9400_0x9401_Test() + { + JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息.Create_从链路报警信息交互消息( + new JT809Header + { + MsgSN = 1666, + EncryptKey = 9999, + EncryptFlag = JT809Header_Encrypt.None, + Version = new JT809Header_Version(1, 0, 0), + MsgGNSSCENTERID = 20180920, + }, new JT809_0x9400 + { + VehicleNo = "粤A12345", + VehicleColor = JT809VehicleColorType.黄色, + SubBusinessType = JT809SubBusinessType.报警督办请求, + SubBodies = JT809SubBusinessType.报警督办请求.Create_报警督办请求( + new JT809_0x9400_0x9401 + { + WarnSrc = JT809WarnSrc.车载终端, + WarnType = JT809WarnType.疲劳驾驶报警, + WarnTime = DateTime.Parse("2018-09-27 10:24:00"), + SupervisionID = "123FFAA1", + SupervisionEndTime = DateTime.Parse("2018-09-27 11:24:00"), + SupervisionLevel = 3, + Supervisor = "smallchi", + SupervisorTel = "12345678901", + SupervisorEmail = "123456@qq.com" + }) + } + ); + var hex = JT809Serializer.Serialize(jT809Package).ToHexString(); + Assert.Equal("5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D", hex); + } + } +} diff --git a/src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs b/src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs index 4af8775..1ae3b4c 100644 --- a/src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs +++ b/src/JT809.Protocol/Extensions/JT809FormatterExtensions.cs @@ -46,5 +46,15 @@ namespace JT809.Protocol.Extensions } return formatter; } + + static JT809FormatterExtensions() + { + PackageFormatter = (JT809PackageFormatter)GetFormatter(); + HeaderPackageFormatter = (JT809HeaderPackageFormatter)GetFormatter(); + HeaderFormatter = (JT809HeaderFormatter)GetFormatter(); + } + public static JT809PackageFormatter PackageFormatter { get; } + public static JT809HeaderPackageFormatter HeaderPackageFormatter { get; } + public static JT809HeaderFormatter HeaderFormatter { get; } } } diff --git a/src/JT809.Protocol/Extensions/JT809PackageExtensions.cs b/src/JT809.Protocol/Extensions/JT809PackageExtensions.cs index 910c383..2b775c5 100644 --- a/src/JT809.Protocol/Extensions/JT809PackageExtensions.cs +++ b/src/JT809.Protocol/Extensions/JT809PackageExtensions.cs @@ -5,7 +5,7 @@ using System.Text; namespace JT809.Protocol.Extensions { - public static class JT809PackageExtensions + public static partial class JT809PackageExtensions { public static JT809Package Create(this JT809BusinessType jT809BusinessType, TJT809Bodies jT809Bodies) where TJT809Bodies: JT809Bodies @@ -38,5 +38,37 @@ namespace JT809.Protocol.Extensions }; return jT809Package; } + + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809Header jT809Header, TJT809Bodies jT809Bodies) + where TJT809Bodies : JT809Bodies + { + JT809Package jT809Package = new JT809Package(); + jT809Package.Bodies = jT809Bodies; + jT809Package.Header = new JT809Header() + { + BusinessType = jT809BusinessType, + MsgSN = jT809Header.MsgSN, + EncryptFlag = jT809Header.EncryptFlag, + EncryptKey = jT809Header.EncryptKey, + MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID, + Version = jT809Header.Version + }; + return jT809Package; + } + + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809Header jT809Header) + { + JT809Package jT809Package = new JT809Package(); + jT809Package.Header = new JT809Header() + { + BusinessType = jT809BusinessType, + MsgSN = jT809Header.MsgSN, + EncryptFlag = jT809Header.EncryptFlag, + EncryptKey = jT809Header.EncryptKey, + MsgGNSSCENTERID = jT809Header.MsgGNSSCENTERID, + Version = jT809Header.Version + }; + return jT809Package; + } } } diff --git a/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.cs b/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.cs new file mode 100644 index 0000000..3a37f1c --- /dev/null +++ b/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.cs @@ -0,0 +1,711 @@ + +using JT809.Protocol.Enums; + +namespace JT809.Protocol.Extensions +{ + public static partial class JT809PackageExtensions + { + /// + /// UP_CONNECT_REQ - 主链路登录请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路登录请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1001 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CONNECT_REQ - 主链路登录请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1001 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CONNECT_REQ - 主链路登录请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路登录请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1001 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_CONNECT_RSP - 主链路登录应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路登录应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1002 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CONNECT_RSP - 主链路登录应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1002 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CONNECT_RSP - 主链路登录应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路登录应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1002 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_DISCONNECT_REQ - 主链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1003 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_REQ - 主链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1003 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_REQ - 主链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1003 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_DISCONNECT_RSP - 主链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1004 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_RSP - 主链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1004 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_RSP - 主链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1004 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_LINKTEST_REQ - 主链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1005 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_LINKTEST_REQ - 主链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1005 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_LINKTEST_REQ - 主链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create_主链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1005 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_LINKTEST_RSP - 主链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1006 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_LINKTEST_RSP - 主链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1006 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_LINKTEST_RSP - 主链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create_主链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1006 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_DISCONNECT_INFORM - 主链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create_主链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1007 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_INFORM - 主链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1007 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_DISCONNECT_INFORM - 主链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create_主链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1007 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1008 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1008 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_EXG_MSG - 主链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_EXG_MSG - 主链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1200 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_EXG_MSG - 主链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1200 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_PLATFORM_MSG - 主链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create_主链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1300 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_PLATFORM_MSG - 主链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1300 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_PLATFORM_MSG - 主链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create_主链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1300 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_WARN_MSG - 主链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create_主链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1400 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_WARN_MSG - 主链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1400 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_WARN_MSG - 主链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create_主链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1400 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_CTRL_MSG - 主链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create_主链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1500 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CTRL_MSG - 主链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1500 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_CTRL_MSG - 主链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create_主链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1500 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// UP_BASE_MSG - 主链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_主链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1600 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_BASE_MSG - 主链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1600 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// UP_BASE_MSG - 主链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_主链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1600 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_CONNECT_REQ - 从链路连接请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9001 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CONNECT_REQ - 从链路连接请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9001 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CONNECT_REQ - 从链路连接请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9001 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_CONNECT_RSP - 从链路连接应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CONNECT_RSP - 从链路连接应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9002 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CONNECT_RSP - 从链路连接应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9002 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_DISCONNECT_REQ - 从链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9003 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_REQ - 从链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9003 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_REQ - 从链路注销请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路注销请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9003 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_DISCONNECT_RSP - 从链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9004 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_RSP - 从链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9004 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_RSP - 从链路注销应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路注销应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9004 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_LINKTEST_REQ - 从链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9005 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_LINKTEST_REQ - 从链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9005 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_LINKTEST_REQ - 从链路连接保持请求消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接保持请求消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9005 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_LINKTEST_RSP - 从链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9006 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_LINKTEST_RSP - 从链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9006 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_LINKTEST_RSP - 从链路连接保持应答消息 + /// auto-generated + /// + public static JT809Package Create_从链路连接保持应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9006 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_DISCONNECT_INFORM - 从链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create_从链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9007 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_INFORM - 从链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9007 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_DISCONNECT_INFORM - 从链路断开通知消息 + /// auto-generated + /// + public static JT809Package Create_从链路断开通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9007 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create_上级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9008 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9008 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CLOSELINK_INFORM - 上级平台主动关闭链路通知消息 + /// auto-generated + /// + public static JT809Package Create_上级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9008 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 + /// auto-generated + /// + public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9101 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 + /// auto-generated + /// + public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9101 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_EXG_MSG - 从链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_EXG_MSG - 从链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9200 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_EXG_MSG - 从链路动态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9200 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9300 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 + /// auto-generated + /// + public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9300 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_WARN_MSG - 从链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create_从链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9400 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_WARN_MSG - 从链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9400 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_WARN_MSG - 从链路报警信息交互消息 + /// auto-generated + /// + public static JT809Package Create_从链路报警信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9400 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_CTRL_MSG - 从链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create_从链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9500 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CTRL_MSG - 从链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9500 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_CTRL_MSG - 从链路车辆监管消息 + /// auto-generated + /// + public static JT809Package Create_从链路车辆监管消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9500 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + /// + /// DOWN_BASE_MSG - 从链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_从链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9600 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_BASE_MSG - 从链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9600 bodies) + { + return Create(jT809BusinessType,bodies); + } + + /// + /// DOWN_BASE_MSG - 从链路静态信息交换消息 + /// auto-generated + /// + public static JT809Package Create_从链路静态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9600 bodies) + { + return Create(jT809BusinessType,jT809Header,bodies); + } + } +} \ No newline at end of file diff --git a/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.tt b/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.tt new file mode 100644 index 0000000..87db0b3 --- /dev/null +++ b/src/JT809.Protocol/Extensions/JT809PackageExtensionsTemplate.tt @@ -0,0 +1,63 @@ +<#@ template debug="false" hostspecific="false" language="C#" #> +<#@ assembly name="netstandard" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="System" #> +<#@ assembly name="$(TargetPath)" #> +<#@ import namespace="JT809.Protocol" #> +<#@ import namespace="JT809.Protocol.Enums" #> +<#@ import namespace="JT809.Protocol.Extensions" #> +<#@ import namespace="JT809.Protocol.Attributes" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Text" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.Reflection" #> +<#@ output extension=".cs" #> + +<# + var types=Enum.GetNames(typeof(JT809BusinessType)); +#> +using JT809.Protocol.Enums; + +namespace JT809.Protocol.Extensions +{ + public static partial class JT809PackageExtensions + { + <# + foreach (var item in types) + { + JT809BusinessType jT809BusinessType = item.ToEnum(); + JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809BusinessType.GetAttribute(); + JT809BusinessTypeDescriptionAttribute jT809MsgIdDescriptionAttribute = jT809BusinessType.GetAttribute(); + +#> + /// + /// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #> + /// auto-generated + /// + public static JT809Package Create_<#= jT809MsgIdDescriptionAttribute.Name #>(this JT809BusinessType jT809BusinessType,<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies) + { + return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,bodies); + } + + /// + /// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #> + /// auto-generated + /// + public static JT809Package Create(this JT809BusinessType jT809BusinessType, <#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies) + { + return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,bodies); + } + + /// + /// <#= jT809MsgIdDescriptionAttribute.Code #> - <#= jT809MsgIdDescriptionAttribute.Name #> + /// auto-generated + /// + public static JT809Package Create_<#= jT809MsgIdDescriptionAttribute.Name #>(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, <#= jT809BodiesTypeAttribute.JT809BodiesType.FullName #> bodies) + { + return Create<<#= jT809BodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809BusinessType,jT809Header,bodies); + } +<# + } +#> + } +} \ No newline at end of file diff --git a/src/JT809.Protocol/Extensions/JT809SubPackageExtensions.cs b/src/JT809.Protocol/Extensions/JT809SubPackageExtensions.cs new file mode 100644 index 0000000..17dc8e6 --- /dev/null +++ b/src/JT809.Protocol/Extensions/JT809SubPackageExtensions.cs @@ -0,0 +1,16 @@ +using JT809.Protocol.Enums; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.Extensions +{ + public static partial class JT809SubPackageExtensions + { + public static TJT809SubBodies Create(this JT809SubBusinessType jT809SubBusinessType, TJT809SubBodies jT809SubBodies) + where TJT809SubBodies : JT809SubBodies + { + return jT809SubBodies; + } + } +} diff --git a/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.cs b/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.cs new file mode 100644 index 0000000..67c9184 --- /dev/null +++ b/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.cs @@ -0,0 +1,410 @@ + +using JT809.Protocol.Enums; + +namespace JT809.Protocol.Extensions +{ + /// + /// 子命令包 + /// auto-generated + /// + public static partial class JT809SubPackageExtensions + { + + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_REGISTER - 上传车辆注册信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201 Create_上传车辆注册信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_REAL_LOCATION - 实时上传车辆定位信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202 Create_实时上传车辆定位信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 Create_车辆定位信息自动补报(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 Create_启动车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 Create_结束车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 Create_申请交换指定车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_APPLY_FOR_MONITOR_END - 取消交换指定车辆定位信息请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208 Create_取消交换指定车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_APPLY_HISGNSSDATA_REQ - 补发车辆定位信息请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209 Create_补发车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报车辆驾驶员身份识别信息应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A Create_上报车辆驾驶员身份识别信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B Create_上报车辆电子运单应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C Create_主动上报驾驶员身份信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路动态信息交换消息 + /// UP_EXG_MSG_REPORT_EWAYBILL_INFO - 主动上报车辆电子运单信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D Create_主动上报车辆电子运单信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路平台间信息交互消息 + /// UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 Create_平台查岗应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路平台间信息交互消息 + /// UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 Create_下发平台间报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路报警信息交互消息 + /// UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 Create_报警督办应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路报警信息交互消息 + /// UP_WARN_MSG_ADPT_INFO - 上报报警信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 Create_上报报警信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路报警信息交互消息 + /// UP_WARN_MSG_ADPT_TODO_INFO - 主动上报报警处理结果信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403 Create_主动上报报警处理结果信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路车辆监管消息 + /// UP_CTRL_MSG_MONITOR_VEHICLE_ACK - 车辆单向监听应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501 Create_车辆单向监听应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路车辆监管消息 + /// UP_CTRL_MSG_TAKE_PHOTO_ACK - 车辆拍照应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502 Create_车辆拍照应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路车辆监管消息 + /// UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 Create_下发车辆报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路车辆监管消息 + /// UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 Create_上报车辆行驶记录应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路车辆监管消息 + /// UP_CTRL_MSG_EMERGENCY_MONITORING_ACK - 车辆应急接入监管平台应答消息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505 Create_车辆应急接入监管平台应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 主链路静态信息交换消息 + /// UP_BASE_MSG_VEHICLE_ADDED_ACK - 补报车辆静态信息应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601 Create_补报车辆静态信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 Create_交换车辆定位信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 Create_车辆定位信息交换补发(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 Create_交换车辆静态信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 Create_启动车辆定位信息交换请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_RETURN_END - 结束车辆定位信息交换请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206 Create_结束车辆定位信息交换请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_APPLY_FOR_MONITOR_STARTUP_ACK - 申请交换指定车辆定位信息应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207 Create_申请交换指定车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_APPLY_FOR_MONITOR_END_ACK - 取消交换指定车辆定位信息应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208 Create_取消交换指定车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_APPLY_HISGNSSDATA_ACK - 补发车辆定位信息应答 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209 Create_补发车辆定位信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_REPORT_DRIVER_INFO - 上报车辆驾驶员身份识别信息请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A Create_上报车辆驾驶员身份识别信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路动态信息交换消息 + /// DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B Create_上报车辆电子运单请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路平台间信息交互消息 + /// DOWN_PLATFORM_MSG_POST_QUERY_REQ - 平台查岗请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301 Create_平台查岗请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路平台间信息交互消息 + /// DOWN_PLATFORM_MSG_INFO_REQ - 下发平台间报文请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302 Create_下发平台间报文请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路报警信息交互消息 + /// DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 Create_报警督办请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路报警信息交互消息 + /// DOWN_WARN_MSG_INFORM_TIPS - 报警预警 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402 Create_报警预警(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路报警信息交互消息 + /// DOWN_WARN_MSG_EXG_INFORM - 实时交换报警信息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403 Create_实时交换报警信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路车辆监管消息 + /// DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 Create_车辆单向监听请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路车辆监管消息 + /// DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 Create_车辆拍照请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路车辆监管消息 + /// DOWN_CTRL_MSG_TEXT_INFO - 下发车辆报文请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503 Create_下发车辆报文请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路车辆监管消息 + /// DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 Create_上报车辆行驶记录请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路车辆监管消息 + /// DOWN_CTRL_MSG_EMERGENCY_MONITORING_REQ - 车辆应急接入监管平台请求消息 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505 Create_车辆应急接入监管平台请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + /// + /// 从链路静态信息交换消息 + /// DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求 + /// auto-generated + /// + public static JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 Create_补报车辆静态信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 subBodies) + { + return Create(jT809SubBusinessType,subBodies); + } + } +} \ No newline at end of file diff --git a/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.tt b/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.tt new file mode 100644 index 0000000..a623d92 --- /dev/null +++ b/src/JT809.Protocol/Extensions/JT809SubPackageExtensionsTemplate.tt @@ -0,0 +1,51 @@ +<#@ template debug="false" hostspecific="false" language="C#" #> +<#@ assembly name="netstandard" #> +<#@ assembly name="System.Core" #> +<#@ assembly name="System" #> +<#@ assembly name="$(TargetPath)" #> +<#@ import namespace="JT809.Protocol" #> +<#@ import namespace="JT809.Protocol.Enums" #> +<#@ import namespace="JT809.Protocol.Extensions" #> +<#@ import namespace="JT809.Protocol.Attributes" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Text" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.Reflection" #> +<#@ output extension=".cs" #> + +<# + var types=Enum.GetNames(typeof(JT809SubBusinessType)); +#> +using JT809.Protocol.Enums; + +namespace JT809.Protocol.Extensions +{ + /// + /// 子命令包 + /// auto-generated + /// + public static partial class JT809SubPackageExtensions + { + +<# + foreach (var item in types) + { + JT809SubBusinessType jT809SubBusinessType = item.ToEnum(); + if (jT809SubBusinessType == JT809SubBusinessType.None) continue; + JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809SubBusinessType.GetAttribute(); + JT809SubBusinessTypeDescriptionAttribute jT809SubBusinessTypeDescriptionAttribute = jT809SubBusinessType.GetAttribute(); +#> + /// + /// <#= jT809SubBusinessTypeDescriptionAttribute.BusinessType.ToString() #> + /// <#= jT809SubBusinessTypeDescriptionAttribute.Code #> - <#= jT809SubBusinessTypeDescriptionAttribute.Name #> + /// auto-generated + /// + public static <#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName #> Create_<#= jT809SubBusinessTypeDescriptionAttribute.Name #>(this JT809SubBusinessType jT809SubBusinessType,<#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName #> subBodies) + { + return Create<<#= jT809SubBodiesTypeAttribute.JT809BodiesType.FullName#>>(jT809SubBusinessType,subBodies); + } +<# + } +#> + } +} \ No newline at end of file diff --git a/src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs b/src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs index 2d83c10..c9527ee 100644 --- a/src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs +++ b/src/JT809.Protocol/Formatters/IJT809FormatterOfT.cs @@ -3,10 +3,15 @@ using System.Buffers; namespace JT809.Protocol.Formatters { - public interface IJT809Formatter + public interface IJT809Formatter: IJT809Formatter { T Deserialize(ReadOnlySpan bytes, out int readSize); int Serialize(ref byte[] bytes, int offset, T value); } + + public interface IJT809Formatter + { + + } } diff --git a/src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs b/src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs index 0562892..bfe6736 100644 --- a/src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs +++ b/src/JT809.Protocol/Formatters/JT809BodiesFormatter.cs @@ -6,6 +6,7 @@ using System; using System.Buffers; using System.Collections.Generic; using System.Text; +using JT809.Protocol.Internal; namespace JT809.Protocol.Formatters { @@ -20,15 +21,9 @@ namespace JT809.Protocol.Formatters jT809Bodies.VehicleColor = (JT809VehicleColorType)JT809BinaryExtensions.ReadByteLittle(bytes, ref offset); jT809Bodies.SubBusinessType = (JT809SubBusinessType)JT809BinaryExtensions.ReadUInt16Little(bytes, ref offset); jT809Bodies.DataLength = JT809BinaryExtensions.ReadUInt32Little(bytes, ref offset); - //JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 - JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = jT809Bodies.SubBusinessType.GetAttribute(); - if (jT809SubBodiesTypeAttribute == null) - { - throw new JT809Exception(JT809ErrorCode.GetAttributeError, $"JT809BodiesTypeAttribute Not Found>{jT809Bodies.SubBusinessType.ToString()}"); - } try { - jT809Bodies.SubBodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809SubBodiesTypeAttribute.JT809BodiesType), bytes.Slice(offset, (int)jT809Bodies.DataLength), out readSize); + jT809Bodies.SubBodies = jT809Bodies.SubBusinessType.Deserialize(bytes.Slice(offset, (int)jT809Bodies.DataLength), out readSize); } catch { @@ -43,17 +38,11 @@ namespace JT809.Protocol.Formatters offset += JT809BinaryExtensions.WriteStringLittle(bytes, offset, value.VehicleNo, 21); offset += JT809BinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.VehicleColor); offset += JT809BinaryExtensions.WriteUInt16Little(bytes, offset, (ushort)value.SubBusinessType); - //JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 - JT809BodiesTypeAttribute jT809SubBodiesTypeAttribute = value.SubBusinessType.GetAttribute(); - if (jT809SubBodiesTypeAttribute == null) - { - throw new JT809Exception(JT809ErrorCode.GetAttributeError, $"JT809BodiesTypeAttribute Not Found>{value.SubBusinessType.ToString()}"); - } try { // 先写入内容,然后在根据内容反写内容长度 offset = offset + 4; - int contentOffset = JT809FormatterResolverExtensions.JT809DynamicSerialize(JT809FormatterExtensions.GetFormatter(jT809SubBodiesTypeAttribute.JT809BodiesType), ref bytes, offset, value.SubBodies); + int contentOffset = value.SubBusinessType.Serialize(ref bytes, offset, value.SubBodies); JT809BinaryExtensions.WriteUInt32Little(bytes, offset - 4, (uint)(contentOffset- offset)); offset = contentOffset; } diff --git a/src/JT809.Protocol/Formatters/JT809HeaderPackageFromatter.cs b/src/JT809.Protocol/Formatters/JT809HeaderPackageFormatter.cs similarity index 63% rename from src/JT809.Protocol/Formatters/JT809HeaderPackageFromatter.cs rename to src/JT809.Protocol/Formatters/JT809HeaderPackageFormatter.cs index 791c286..b24c6b8 100644 --- a/src/JT809.Protocol/Formatters/JT809HeaderPackageFromatter.cs +++ b/src/JT809.Protocol/Formatters/JT809HeaderPackageFormatter.cs @@ -6,7 +6,7 @@ using System; namespace JT809.Protocol.Formatters { - public class JT809HeaderPackageFromatter : IJT809Formatter + public class JT809HeaderPackageFormatter : IJT809Formatter { public JT809HeaderPackage Deserialize(ReadOnlySpan bytes, out int readSize) { @@ -35,7 +35,7 @@ namespace JT809.Protocol.Formatters // 3.初始化消息头 try { - jT809HeaderPackage.Header = JT809FormatterExtensions.GetFormatter().Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize); + jT809HeaderPackage.Header = JT809FormatterExtensions.HeaderFormatter.Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize); } catch (Exception ex) { @@ -46,30 +46,25 @@ namespace JT809.Protocol.Formatters // 5.1 判断是否有数据体(总长度-固定长度)> 0 if ((jT809HeaderPackage.Header.MsgLength - JT809Package.FixedByteLength) > 0) { - //JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 - JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809HeaderPackage.Header.BusinessType.GetAttribute(); - if (jT809BodiesTypeAttribute != null) + try { - try + // 5.2 是否加密 + switch (jT809HeaderPackage.Header.EncryptFlag) { - // 5.2 是否加密 - switch (jT809HeaderPackage.Header.EncryptFlag) - { - case JT809Header_Encrypt.None: - //5.3 处理消息体 - jT809HeaderPackage.Bodies = buffer.Slice(offset, checkIndex - offset).ToArray(); - break; - case JT809Header_Encrypt.Common: - byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809HeaderPackage.Header.EncryptKey); - jT809HeaderPackage.Bodies = bodiesData; - break; - } - } - catch (Exception ex) - { - throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{offset.ToString()}", ex); + case JT809Header_Encrypt.None: + //5.3 处理消息体 + jT809HeaderPackage.Bodies = buffer.Slice(offset, checkIndex - offset).ToArray(); + break; + case JT809Header_Encrypt.Common: + byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809HeaderPackage.Header.EncryptKey); + jT809HeaderPackage.Bodies = bodiesData; + break; } } + catch (Exception ex) + { + throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{offset.ToString()}", ex); + } } jT809HeaderPackage.EndFlag = buffer[buffer.Length - 1]; readSize = buffer.Length; diff --git a/src/JT809.Protocol/Formatters/JT809PackageFormatter.cs b/src/JT809.Protocol/Formatters/JT809PackageFormatter.cs index d7ca3d7..cc65408 100644 --- a/src/JT809.Protocol/Formatters/JT809PackageFormatter.cs +++ b/src/JT809.Protocol/Formatters/JT809PackageFormatter.cs @@ -2,6 +2,7 @@ using JT809.Protocol.Enums; using JT809.Protocol.Exceptions; using JT809.Protocol.Extensions; +using JT809.Protocol.Internal; using System; using System.Buffers; using System.Collections.Generic; @@ -38,7 +39,7 @@ namespace JT809.Protocol.Formatters // 3.初始化消息头 try { - jT809Package.Header = JT809FormatterExtensions.GetFormatter().Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize); + jT809Package.Header = JT809FormatterExtensions.HeaderFormatter.Deserialize(buffer.Slice(offset, JT809Header.FixedByteLength), out readSize); } catch (Exception ex) { @@ -49,30 +50,25 @@ namespace JT809.Protocol.Formatters // 5.1 判断是否有数据体(总长度-固定长度)> 0 if ((jT809Package.Header.MsgLength - JT809Package.FixedByteLength) > 0) { - //JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 - JT809BodiesTypeAttribute jT809BodiesTypeAttribute = jT809Package.Header.BusinessType.GetAttribute(); - if (jT809BodiesTypeAttribute != null) + try { - try + // 5.2 是否加密 + switch (jT809Package.Header.EncryptFlag) { - // 5.2 是否加密 - switch (jT809Package.Header.EncryptFlag) - { - case JT809Header_Encrypt.None: - //5.3 处理消息体 - jT809Package.Bodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), buffer.Slice(offset, checkIndex - offset), out readSize); - break; - case JT809Header_Encrypt.Common: - byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809Package.Header.EncryptKey); - jT809Package.Bodies = JT809FormatterResolverExtensions.JT809DynamicDeserialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), bodiesData, out readSize); - break; - } - } - catch (Exception ex) - { - throw new JT809Exception(JT809ErrorCode.BodiesParseError,$"offset>{offset.ToString()}", ex); + case JT809Header_Encrypt.None: + //5.3 处理消息体 + jT809Package.Bodies = jT809Package.Header.BusinessType.Deserialize(buffer.Slice(offset, checkIndex - offset), out readSize); + break; + case JT809Header_Encrypt.Common: + byte[] bodiesData = JT809GlobalConfig.Instance.Encrypt.Decrypt(buffer.Slice(offset, checkIndex - offset).ToArray(), jT809Package.Header.EncryptKey); + jT809Package.Bodies = jT809Package.Header.BusinessType.Deserialize(bodiesData, out readSize); + break; } } + catch (Exception ex) + { + throw new JT809Exception(JT809ErrorCode.BodiesParseError,$"offset>{offset.ToString()}", ex); + } } jT809Package.EndFlag = buffer[buffer.Length - 1]; readSize = buffer.Length; @@ -83,14 +79,10 @@ namespace JT809.Protocol.Formatters { // 1. 先序列化数据体,根据数据体的长度赋值给头部,在序列化头部。 int messageBodyOffset = 0; - JT809BodiesTypeAttribute jT809BodiesTypeAttribute = value.Header.BusinessType.GetAttribute(); - if (jT809BodiesTypeAttribute != null) + if (value.Bodies != null) { - if (value.Bodies != null) - { - // 1.1 处理数据体 - messageBodyOffset = JT809FormatterResolverExtensions.JT809DynamicSerialize(JT809FormatterExtensions.GetFormatter(jT809BodiesTypeAttribute.JT809BodiesType), ref bytes, messageBodyOffset, value.Bodies); - } + // 1.1 处理数据体 + messageBodyOffset = value.Header.BusinessType.Serialize(ref bytes, messageBodyOffset, value.Bodies); } byte[] messageBodyData=null; if (messageBodyOffset != 0) @@ -119,7 +111,7 @@ namespace JT809.Protocol.Formatters value.Header.MsgLength = JT809Package.FixedByteLength; } // 2.1写入头部数据 - offset = JT809FormatterExtensions.GetFormatter().Serialize(ref bytes, offset, value.Header); + offset = JT809FormatterExtensions.HeaderFormatter.Serialize(ref bytes, offset, value.Header); if (messageBodyOffset != 0) { // 3. 写入数据体 diff --git a/src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x9600_0x1601_Formatter.cs b/src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x1600_0x1601_Formatter.cs similarity index 93% rename from src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x9600_0x1601_Formatter.cs rename to src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x1600_0x1601_Formatter.cs index fa32bdf..dc722f5 100644 --- a/src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x9600_0x1601_Formatter.cs +++ b/src/JT809.Protocol/Formatters/SubMessageBodyFormatters/JT809_0x1600_0x1601_Formatter.cs @@ -7,7 +7,7 @@ using System.Text; namespace JT809.Protocol.Formatters.SubMessageBodyFormatters { - public class JT809_0x9600_0x1601_Formatter : IJT809Formatter + public class JT809_0x1600_0x1601_Formatter : IJT809Formatter { public JT809_0x1600_0x1601 Deserialize(ReadOnlySpan bytes, out int readSize) { diff --git a/src/JT809.Protocol/Internal/BusinessTypeSerializerFactory.cs b/src/JT809.Protocol/Internal/BusinessTypeSerializerFactory.cs new file mode 100644 index 0000000..ce538e9 --- /dev/null +++ b/src/JT809.Protocol/Internal/BusinessTypeSerializerFactory.cs @@ -0,0 +1,138 @@ +using JT809.Protocol.Enums; +using JT809.Protocol.Formatters; +using JT809.Protocol.Formatters.MessageBodyFormatters; +using JT809.Protocol.MessageBody; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.Internal +{ + static class BusinessTypeSerializerFactory + { + static JT809_0x1001_Formatter jT809_0x1001_Formatter = new JT809_0x1001_Formatter(); + static JT809_0x1002_Formatter jT809_0x1002_Formatter = new JT809_0x1002_Formatter(); + static JT809_0x1003_Formatter jT809_0x1003_Formatter = new JT809_0x1003_Formatter(); + static JT809_0x1007_Formatter jT809_0x1007_Formatter = new JT809_0x1007_Formatter(); + static JT809_0x1008_Formatter jT809_0x1008_Formatter = new JT809_0x1008_Formatter(); + static JT809BodiesFormatter JT809_0x1200_Formatter = new JT809BodiesFormatter(); + static JT809_0x1300_Formatter jT809_0x1300_Formatter = new JT809_0x1300_Formatter(); + static JT809BodiesFormatter JT809_0x1400_Formatter = new JT809BodiesFormatter(); + static JT809BodiesFormatter JT809_0x1500_Formatter = new JT809BodiesFormatter(); + static JT809BodiesFormatter JT809_0x1600_Formatter = new JT809BodiesFormatter(); + static JT809_0x9001_Formatter jT809_0x9001_Formatter = new JT809_0x9001_Formatter(); + static JT809_0x9002_Formatter jT809_0x9002_Formatter = new JT809_0x9002_Formatter(); + static JT809_0x9003_Formatter jT809_0x9003_Formatter = new JT809_0x9003_Formatter(); + static JT809_0x9007_Formatter jT809_0x9007_Formatter = new JT809_0x9007_Formatter(); + static JT809_0x9008_Formatter jT809_0x9008_Formatter = new JT809_0x9008_Formatter(); + static JT809_0x9101_Formatter jT809_0x9101_Formatter = new JT809_0x9101_Formatter(); + static JT809BodiesFormatter jT809_0x9200_Formatter = new JT809BodiesFormatter(); + static JT809_0x9300_Formatter jT809_0x9300_Formatter = new JT809_0x9300_Formatter(); + static JT809BodiesFormatter jT809_0x9400_Formatter = new JT809BodiesFormatter(); + static JT809BodiesFormatter jT809_0x9500_Formatter = new JT809BodiesFormatter(); + static JT809BodiesFormatter jT809_0x9600_Formatter = new JT809BodiesFormatter(); + + public static JT809Bodies Deserialize(this JT809BusinessType jT809BusinessType, ReadOnlySpan bytes, out int readSize) + { + switch (jT809BusinessType) + { + case JT809BusinessType.主链路登录请求消息: + return jT809_0x1001_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路登录应答消息: + return jT809_0x1002_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路注销请求消息: + return jT809_0x1003_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路断开通知消息: + return jT809_0x1007_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.下级平台主动关闭链路通知消息: + return jT809_0x1008_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路动态信息交换消息: + return JT809_0x1200_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路平台间信息交互消息: + return jT809_0x1300_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路报警信息交互消息: + return JT809_0x1400_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路车辆监管消息: + return JT809_0x1500_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.主链路静态信息交换消息: + return JT809_0x1600_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路连接请求消息: + return jT809_0x9001_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路连接应答消息: + return jT809_0x9002_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路注销请求消息: + return jT809_0x9003_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路断开通知消息: + return jT809_0x9007_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.上级平台主动关闭链路通知消息: + return jT809_0x9008_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.接收定位信息数量通知消息: + return jT809_0x9101_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路动态信息交换消息: + return jT809_0x9200_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路平台间信息交互消息: + return jT809_0x9300_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路报警信息交互消息: + return jT809_0x9400_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路车辆监管消息: + return jT809_0x9500_Formatter.Deserialize(bytes, out readSize); + case JT809BusinessType.从链路静态信息交换消息: + return jT809_0x9600_Formatter.Deserialize(bytes, out readSize); + default: + readSize = 0; + return default; + } + } + + public static int Serialize(this JT809BusinessType jT809BusinessType, ref byte[] bytes, int offset, dynamic value) + { + switch (jT809BusinessType) + { + case JT809BusinessType.主链路登录请求消息: + return jT809_0x1001_Formatter.Serialize(ref bytes,offset, value); + case JT809BusinessType.主链路登录应答消息: + return jT809_0x1002_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路注销请求消息: + return jT809_0x1003_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路断开通知消息: + return jT809_0x1007_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.下级平台主动关闭链路通知消息: + return jT809_0x1008_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路动态信息交换消息: + return JT809_0x1200_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路平台间信息交互消息: + return jT809_0x1300_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路报警信息交互消息: + return JT809_0x1400_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路车辆监管消息: + return JT809_0x1500_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.主链路静态信息交换消息: + return JT809_0x1600_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路连接请求消息: + return jT809_0x9001_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路连接应答消息: + return jT809_0x9002_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路注销请求消息: + return jT809_0x9003_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路断开通知消息: + return jT809_0x9007_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.上级平台主动关闭链路通知消息: + return jT809_0x9008_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.接收定位信息数量通知消息: + return jT809_0x9101_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路动态信息交换消息: + return jT809_0x9200_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路平台间信息交互消息: + return jT809_0x9300_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路报警信息交互消息: + return jT809_0x9400_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路车辆监管消息: + return jT809_0x9500_Formatter.Serialize(ref bytes, offset, value); + case JT809BusinessType.从链路静态信息交换消息: + return jT809_0x9600_Formatter.Serialize(ref bytes, offset, value); + default: + return offset; + } + } + } +} diff --git a/src/JT809.Protocol/Internal/SubBodiesTypeSerializerFactory.cs b/src/JT809.Protocol/Internal/SubBodiesTypeSerializerFactory.cs new file mode 100644 index 0000000..a1cb288 --- /dev/null +++ b/src/JT809.Protocol/Internal/SubBodiesTypeSerializerFactory.cs @@ -0,0 +1,221 @@ +using JT809.Protocol.Enums; +using JT809.Protocol.Formatters.SubMessageBodyFormatters; +using System; + +namespace JT809.Protocol.Internal +{ + static class SubBodiesTypeSerializerFactory + { + static JT809_0x1200_0x1201_Formatter jT809_0X1200_0X1201_Formatter = new JT809_0x1200_0x1201_Formatter(); + static JT809_0x1200_0x1202_Formatter jT809_0X1200_0X1202_Formatter = new JT809_0x1200_0x1202_Formatter(); + static JT809_0x1200_0x1203_Formatter jT809_0X1200_0X1203_Formatter = new JT809_0x1200_0x1203_Formatter(); + static JT809_0x1200_0x1207_Formatter jT809_0X1200_0X1207_Formatter = new JT809_0x1200_0x1207_Formatter(); + static JT809_0x1200_0x1209_Formatter jT809_0X1200_0X1209_Formatter = new JT809_0x1200_0x1209_Formatter(); + static JT809_0x1200_0x120A_Formatter jT809_0X1200_0X120A_Formatter = new JT809_0x1200_0x120A_Formatter(); + static JT809_0x1200_0x120B_Formatter jT809_0X1200_0X120B_Formatter = new JT809_0x1200_0x120B_Formatter(); + static JT809_0x1200_0x120C_Formatter jT809_0X1200_0X120C_Formatter = new JT809_0x1200_0x120C_Formatter(); + static JT809_0x1200_0x120D_Formatter jT809_0X1200_0X120D_Formatter = new JT809_0x1200_0x120D_Formatter(); + static JT809_0x1300_0x1301_Formatter jT809_0X1300_0X1301_Formatter = new JT809_0x1300_0x1301_Formatter(); + static JT809_0x1300_0x1302_Formatter jT809_0X1300_0X1302_Formatter = new JT809_0x1300_0x1302_Formatter(); + static JT809_0x1400_0x1401_Formatter jT809_0X1400_0X1401_Formatter = new JT809_0x1400_0x1401_Formatter(); + static JT809_0x1400_0x1402_Formatter jT809_0X1400_0X1402_Formatter = new JT809_0x1400_0x1402_Formatter(); + static JT809_0x1400_0x1403_Formatter jT809_0X1400_0X1403_Formatter = new JT809_0x1400_0x1403_Formatter(); + static JT809_0x1500_0x1501_Formatter jT809_0X1500_0X1501_Formatter = new JT809_0x1500_0x1501_Formatter(); + static JT809_0x1500_0x1502_Formatter jT809_0X1500_0X1502_Formatter = new JT809_0x1500_0x1502_Formatter(); + static JT809_0x1500_0x1503_Formatter jT809_0X1500_0X1503_Formatter = new JT809_0x1500_0x1503_Formatter(); + static JT809_0x1500_0x1504_Formatter jT809_0X1500_0X1504_Formatter = new JT809_0x1500_0x1504_Formatter(); + static JT809_0x1500_0x1505_Formatter jT809_0X1500_0X1505_Formatter = new JT809_0x1500_0x1505_Formatter(); + static JT809_0x1600_0x1601_Formatter jT809_0X1600_0X1601_Formatter = new JT809_0x1600_0x1601_Formatter(); + + static JT809_0x9200_0x9202_Formatter jT809_0X9200_0X9202_Formatter = new JT809_0x9200_0x9202_Formatter(); + static JT809_0x9200_0x9203_Formatter jT809_0X9200_0X9203_Formatter = new JT809_0x9200_0x9203_Formatter(); + static JT809_0x9200_0x9204_Formatter jT809_0X9200_0X9204_Formatter = new JT809_0x9200_0x9204_Formatter(); + static JT809_0x9200_0x9205_Formatter jT809_0X9200_0X9205_Formatter = new JT809_0x9200_0x9205_Formatter(); + static JT809_0x9200_0x9206_Formatter jT809_0X9200_0X9206_Formatter = new JT809_0x9200_0x9206_Formatter(); + static JT809_0x9200_0x9207_Formatter jT809_0X9200_0X9207_Formatter = new JT809_0x9200_0x9207_Formatter(); + static JT809_0x9200_0x9208_Formatter jT809_0X9200_0X9208_Formatter = new JT809_0x9200_0x9208_Formatter(); + static JT809_0x9200_0x9209_Formatter jT809_0X9200_0X9209_Formatter = new JT809_0x9200_0x9209_Formatter(); + static JT809_0x9300_0x9301_Formatter jT809_0X9300_0X9301_Formatter = new JT809_0x9300_0x9301_Formatter(); + static JT809_0x9300_0x9302_Formatter jT809_0X9300_0X9302_Formatter = new JT809_0x9300_0x9302_Formatter(); + static JT809_0x9400_0x9401_Formatter jT809_0X9400_0X9401_Formatter = new JT809_0x9400_0x9401_Formatter(); + static JT809_0x9400_0x9402_Formatter jT809_0X9400_0X9402_Formatter = new JT809_0x9400_0x9402_Formatter(); + static JT809_0x9400_0x9403_Formatter jT809_0X9400_0X9403_Formatter = new JT809_0x9400_0x9403_Formatter(); + static JT809_0x9500_0x9501_Formatter jT809_0X9500_0X9501_Formatter = new JT809_0x9500_0x9501_Formatter(); + static JT809_0x9500_0x9502_Formatter jT809_0X9500_0X9502_Formatter = new JT809_0x9500_0x9502_Formatter(); + static JT809_0x9500_0x9503_Formatter jT809_0X9500_0X9503_Formatter = new JT809_0x9500_0x9503_Formatter(); + static JT809_0x9500_0x9504_Formatter jT809_0X9500_0X9504_Formatter = new JT809_0x9500_0x9504_Formatter(); + static JT809_0x9500_0x9505_Formatter jT809_0X9500_0X9505_Formatter = new JT809_0x9500_0x9505_Formatter(); + + + public static JT809SubBodies Deserialize(this JT809SubBusinessType jT809SubBusinessType, ReadOnlySpan bytes, out int readSize) + { + switch (jT809SubBusinessType) + { + case JT809SubBusinessType.上传车辆注册信息: + return jT809_0X1200_0X1201_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.实时上传车辆定位信息: + return jT809_0X1200_0X1202_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆定位信息自动补报: + return jT809_0X1200_0X1203_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.申请交换指定车辆定位信息请求: + return jT809_0X1200_0X1207_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.补发车辆定位信息请求: + return jT809_0X1200_0X1209_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.上报车辆驾驶员身份识别信息应答: + return jT809_0X1200_0X120A_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.上报车辆电子运单应答: + return jT809_0X1200_0X120B_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.主动上报驾驶员身份信息: + return jT809_0X1200_0X120C_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.主动上报车辆电子运单信息: + return jT809_0X1200_0X120D_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.平台查岗应答: + return jT809_0X1300_0X1301_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.下发平台间报文应答: + return jT809_0X1300_0X1302_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.报警督办应答: + return jT809_0X1400_0X1401_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.上报报警信息: + return jT809_0X1400_0X1402_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.主动上报报警处理结果信息: + return jT809_0X1400_0X1403_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆单向监听应答: + return jT809_0X1500_0X1501_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆拍照应答: + return jT809_0X1500_0X1502_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.下发车辆报文应答: + return jT809_0X1500_0X1503_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.上报车辆行驶记录应答: + return jT809_0X1500_0X1504_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆应急接入监管平台应答消息: + return jT809_0X1500_0X1505_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.补报车辆静态信息应答: + return jT809_0X1600_0X1601_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.交换车辆定位信息: + return jT809_0X9200_0X9202_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆定位信息交换补发: + return jT809_0X9200_0X9203_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.交换车辆静态信息: + return jT809_0X9200_0X9204_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.启动车辆定位信息交换请求: + return jT809_0X9200_0X9205_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.结束车辆定位信息交换请求: + return jT809_0X9200_0X9206_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.申请交换指定车辆定位信息应答: + return jT809_0X9200_0X9207_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.取消交换指定车辆定位信息应答: + return jT809_0X9200_0X9208_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.补发车辆定位信息应答: + return jT809_0X9200_0X9209_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.平台查岗请求: + return jT809_0X9300_0X9301_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.下发平台间报文请求: + return jT809_0X9300_0X9302_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.报警督办请求: + return jT809_0X9400_0X9401_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.报警预警: + return jT809_0X9400_0X9402_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.实时交换报警信息: + return jT809_0X9400_0X9403_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆单向监听请求: + return jT809_0X9500_0X9501_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆拍照请求: + return jT809_0X9500_0X9502_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.下发车辆报文请求: + return jT809_0X9500_0X9503_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.上报车辆行驶记录请求: + return jT809_0X9500_0X9504_Formatter.Deserialize(bytes, out readSize); + case JT809SubBusinessType.车辆应急接入监管平台请求消息: + return jT809_0X9500_0X9505_Formatter.Deserialize(bytes, out readSize); + default: + readSize = 0; + return default; + } + } + + public static int Serialize(this JT809SubBusinessType jT809SubBusinessType, ref byte[] bytes, int offset, dynamic value) + { + switch (jT809SubBusinessType) + { + case JT809SubBusinessType.上传车辆注册信息: + return jT809_0X1200_0X1201_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.实时上传车辆定位信息: + return jT809_0X1200_0X1202_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆定位信息自动补报: + return jT809_0X1200_0X1203_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.申请交换指定车辆定位信息请求: + return jT809_0X1200_0X1207_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.补发车辆定位信息请求: + return jT809_0X1200_0X1209_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.上报车辆驾驶员身份识别信息应答: + return jT809_0X1200_0X120A_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.上报车辆电子运单应答: + return jT809_0X1200_0X120B_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.主动上报驾驶员身份信息: + return jT809_0X1200_0X120C_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.主动上报车辆电子运单信息: + return jT809_0X1200_0X120D_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.平台查岗应答: + return jT809_0X1300_0X1301_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.下发平台间报文应答: + return jT809_0X1300_0X1302_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.报警督办应答: + return jT809_0X1400_0X1401_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.上报报警信息: + return jT809_0X1400_0X1402_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.主动上报报警处理结果信息: + return jT809_0X1400_0X1403_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆单向监听应答: + return jT809_0X1500_0X1501_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆拍照应答: + return jT809_0X1500_0X1502_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.下发车辆报文应答: + return jT809_0X1500_0X1503_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.上报车辆行驶记录应答: + return jT809_0X1500_0X1504_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆应急接入监管平台应答消息: + return jT809_0X1500_0X1505_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.补报车辆静态信息应答: + return jT809_0X1600_0X1601_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.交换车辆定位信息: + return jT809_0X9200_0X9202_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆定位信息交换补发: + return jT809_0X9200_0X9203_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.交换车辆静态信息: + return jT809_0X9200_0X9204_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.启动车辆定位信息交换请求: + return jT809_0X9200_0X9205_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.结束车辆定位信息交换请求: + return jT809_0X9200_0X9206_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.申请交换指定车辆定位信息应答: + return jT809_0X9200_0X9207_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.取消交换指定车辆定位信息应答: + return jT809_0X9200_0X9208_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.补发车辆定位信息应答: + return jT809_0X9200_0X9209_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.平台查岗请求: + return jT809_0X9300_0X9301_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.下发平台间报文请求: + return jT809_0X9300_0X9302_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.报警督办请求: + return jT809_0X9400_0X9401_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.报警预警: + return jT809_0X9400_0X9402_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.实时交换报警信息: + return jT809_0X9400_0X9403_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆单向监听请求: + return jT809_0X9500_0X9501_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆拍照请求: + return jT809_0X9500_0X9502_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.下发车辆报文请求: + return jT809_0X9500_0X9503_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.上报车辆行驶记录请求: + return jT809_0X9500_0X9504_Formatter.Serialize(ref bytes, offset, value); + case JT809SubBusinessType.车辆应急接入监管平台请求消息: + return jT809_0X9500_0X9505_Formatter.Serialize(ref bytes, offset, value); + default: + return offset; + } + } + } +} diff --git a/src/JT809.Protocol/JT809.Protocol.csproj b/src/JT809.Protocol/JT809.Protocol.csproj index 4781bb1..57628f1 100644 --- a/src/JT809.Protocol/JT809.Protocol.csproj +++ b/src/JT809.Protocol/JT809.Protocol.csproj @@ -12,9 +12,9 @@ false https://github.com/SmallChi/JT809 https://github.com/SmallChi/JT809 - https://github.com/SmallChi/JT809/blob/master/LICENSE + https://github.com/SmallChi/JT809/blob/master/LICENSE true - 1.2.1 + 1.3.0 @@ -84,12 +84,53 @@ + + + True + True + JT809PackageExtensionsTemplate.tt + + + True + True + JT809SubPackageExtensionsTemplate.tt + + + - + + + + TextTemplatingFileGenerator + JT809PackageExtensionsTemplate.cs + + + TextTemplatingFileGenerator + JT809SubPackageExtensionsTemplate.cs + + + + + + + + + + True + True + JT809PackageExtensionsTemplate.tt + + + True + True + JT809SubPackageExtensionsTemplate.tt + + + diff --git a/src/JT809.Protocol/JT809HeaderPackage.cs b/src/JT809.Protocol/JT809HeaderPackage.cs index 159dcdc..4f46968 100644 --- a/src/JT809.Protocol/JT809HeaderPackage.cs +++ b/src/JT809.Protocol/JT809HeaderPackage.cs @@ -9,7 +9,7 @@ namespace JT809.Protocol /// /// JT809头部数据包 /// - [JT809Formatter(typeof(JT809HeaderPackageFromatter))] + [JT809Formatter(typeof(JT809HeaderPackageFormatter))] public class JT809HeaderPackage { public byte BeginFlag { get; set; } = JT809Package.BEGINFLAG; diff --git a/src/JT809.Protocol/JT809Serializer.cs b/src/JT809.Protocol/JT809Serializer.cs index 4048494..7376926 100644 --- a/src/JT809.Protocol/JT809Serializer.cs +++ b/src/JT809.Protocol/JT809Serializer.cs @@ -14,12 +14,21 @@ namespace JT809.Protocol { public static byte[] Serialize(JT809Package jT809Package, int minBufferSize = 1024) { - return Serialize(jT809Package, minBufferSize); + byte[] buffer = JT809ArrayPool.Rent(minBufferSize); + try + { + var len = JT809FormatterExtensions.PackageFormatter.Serialize(ref buffer, 0, jT809Package); + return buffer.AsSpan(0, len).ToArray(); + } + finally + { + JT809ArrayPool.Return(buffer); + } } public static JT809Package Deserialize(ReadOnlySpan bytes) { - return Deserialize(bytes); + return JT809FormatterExtensions.PackageFormatter.Deserialize(bytes, out _); } public static byte[] Serialize(T obj, int minBufferSize = 1024) @@ -39,9 +48,7 @@ namespace JT809.Protocol public static T Deserialize(ReadOnlySpan bytes) { - var formatter = JT809FormatterExtensions.GetFormatter(); - int readSize; - return formatter.Deserialize(bytes, out readSize); + return JT809FormatterExtensions.GetFormatter().Deserialize(bytes, out _); } } } diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs index ab1dd37..0d201d5 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1600_0x1601.cs @@ -11,7 +11,7 @@ namespace JT809.Protocol.SubMessageBody /// 子业务类型标识:UP_BASE_MSG_VEHICLE_ADDED_ACK /// 描述:上级平台应答下级平台发送的补报车辆静态信息清求消息 /// - [JT809Formatter(typeof(JT809_0x9600_0x1601_Formatter))] + [JT809Formatter(typeof(JT809_0x1600_0x1601_Formatter))] public class JT809_0x1600_0x1601:JT809SubBodies { /// diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs index 7f39824..704d7e1 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9204.cs @@ -12,7 +12,7 @@ namespace JT809.Protocol.SubMessageBody /// 描述:在首次启动跨域车辆定位信息交换,或者以后交换过程中车辆静态信息有更新时,由上级平台向下级平台下发一次车辆静态信息。下.级平台接收后自行更新该车辆静态信息 /// [JT809Formatter(typeof(JT809_0x9200_0x9204_Formatter))] - public class JT809_0x9200_0x9204 + public class JT809_0x9200_0x9204:JT809SubBodies { /// /// 车辆信息 diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs index 28d7d84..fe0695b 100644 --- a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs +++ b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x920B.cs @@ -8,7 +8,7 @@ namespace JT809.Protocol.SubMessageBody /// 上报车辆电子运单请求消息 /// 子业务类型标识:DOWN_EXG_MSG_TAKE_EWAYBILL_REQ /// - public class JT809_0x9200_0x920B + public class JT809_0x9200_0x920B:JT809SubBodies { } }