@@ -198,8 +198,8 @@ JT809Package jT809Package = JT809BusinessType.从链路报警信息交互消息. | |||
{ | |||
VehicleNo = "粤A12345", | |||
VehicleColor = JT809VehicleColorType.黄色, | |||
SubBusinessType = JT809SubBusinessType.报警督办请求.ToUInt16Value(), | |||
SubBodies = JT809SubBusinessType.报警督办请求.Create_报警督办请求( | |||
SubBusinessType = JT809SubBusinessType.报警督办请求消息.ToUInt16Value(), | |||
SubBodies = JT809SubBusinessType.报警督办请求消息.Create_报警督办请求消息( | |||
new JT809_0x9400_0x9401 | |||
{ | |||
WarnSrc = JT809WarnSrc.车载终端, | |||
@@ -250,21 +250,21 @@ static void Main(string[] args) | |||
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18363 | |||
Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores | |||
.NET Core SDK=3.1.100 | |||
[Host] : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT | |||
Job-RQJOPV : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT | |||
.NET Core SDK=3.1.201 | |||
[Host] : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT | |||
Job-BAIJRX : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT | |||
Platform=AnyCpu Server=False Toolchain=.NET Core 3.1 | |||
``` | |||
| Method | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | | |||
|---------------------------------------- |------- |-------------:|-------------:|------------:|-----------:|------:|------:|-------------:| | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **100** | **629.9 us** | **11.09 us** | **9.83 us** | **15.6250** | **-** | **-** | **100.79 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 100 | 501.0 us | 8.63 us | 8.07 us | 13.1836 | - | - | 83.59 KB | | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **10000** | **63,018.0 us** | **954.14 us** | **845.82 us** | **1625.0000** | **-** | **-** | **10078.74 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 10000 | 48,890.0 us | 1,107.12 us | 1,136.93 us | 1363.6364 | - | - | 8359.38 KB | | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **100000** | **623,675.9 us** | **10,185.67 us** | **9,527.68 us** | **16000.0000** | **-** | **-** | **100787.23 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 100000 | 486,690.2 us | 6,158.00 us | 5,458.90 us | 13000.0000 | - | - | 83595.03 KB | | |||
| Method | N | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | | |||
|---------------------------------------- |------- |-------------:|------------:|------------:|-----------:|------:|------:|-------------:| | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **100** | **509.5 us** | **2.50 us** | **2.22 us** | **15.6250** | **-** | **-** | **100.78 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 100 | 203.6 us | 1.95 us | 1.82 us | 13.4277 | - | - | 83.59 KB | | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **10000** | **48,343.9 us** | **580.83 us** | **543.31 us** | **1636.3636** | **-** | **-** | **10078.13 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 10000 | 20,705.0 us | 165.58 us | 154.88 us | 1343.7500 | - | - | 8359.38 KB | | |||
| **JT809_0x9400_0x9401_Package_Deserialize** | **100000** | **476,503.3 us** | **4,965.19 us** | **4,401.51 us** | **16000.0000** | **-** | **-** | **100781.25 KB** | | |||
| JT809_0x9400_0x9401_Package_Serialize | 100000 | 207,481.3 us | 1,467.56 us | 1,372.76 us | 13333.3333 | - | - | 83594.04 KB | | |||
## JT809协议消息对照表 | |||
@@ -10,9 +10,9 @@ namespace JT809.Protocol.Test.JT1078 | |||
public static IJT809Builder AddJT1078Configure(this IJT809Builder builder) | |||
{ | |||
builder.Config.Register(Assembly.GetExecutingAssembly()); | |||
builder.Config.BusinessTypeFactory.SetMap<JT808_JT1078_0x1700>(0x1700); | |||
#warning 不知道是不是jt1078协议的809结构有问题,先按交换的格式(少了数据交换的头部) | |||
builder.Config.SubBusinessTypeFactory.SetMap<JT808_JT1078_0x1700_0x1701>(0x1701); | |||
builder.Config.BusinessTypeFactory.SetMap<JT808_JT1078_0x1700>(); | |||
//#warning 不知道是不是jt1078协议的809结构有问题,先按交换的格式(少了数据交换的头部) | |||
builder.Config.SubBusinessTypeFactory.SetMap<JT808_JT1078_0x1700_0x1701>(); | |||
return builder; | |||
} | |||
} | |||
@@ -1,16 +1,74 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT809.Protocol.Test.JT1078 | |||
{ | |||
public class JT808_JT1078_0x1700 : JT809ExchangeMessageBodies | |||
public class JT808_JT1078_0x1700 : JT809ExchangeMessageBodies,IJT809MessagePackFormatter<JT808_JT1078_0x1700> | |||
{ | |||
public override ushort MsgId => throw new NotImplementedException(); | |||
public override ushort MsgId => 0x1700; | |||
public override JT809_LinkType LinkType => throw new NotImplementedException(); | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public override string Description => throw new NotImplementedException(); | |||
public override string Description => "0x1700"; | |||
public JT808_JT1078_0x1700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT808_JT1078_0x1700 jT808_JT1078_0X1700 = new JT808_JT1078_0x1700(); | |||
jT808_JT1078_0X1700.VehicleNo = reader.ReadString(21); | |||
jT808_JT1078_0X1700.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
jT808_JT1078_0X1700.SubBusinessType = reader.ReadUInt16(); | |||
jT808_JT1078_0X1700.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(jT808_JT1078_0X1700.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
jT808_JT1078_0X1700.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{jT808_JT1078_0X1700.SubBusinessType.ToString()}"); | |||
} | |||
return jT808_JT1078_0X1700; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT808_JT1078_0x1700 value, IJT809Config config) | |||
{ | |||
try | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,10 +1,12 @@ | |||
using System; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT809.Protocol.Test.JT1078 | |||
{ | |||
public class JT808_JT1078_0x1700_0x1701 : JT809SubBodies | |||
public class JT808_JT1078_0x1700_0x1701 : JT809SubBodies, IJT809MessagePackFormatter<JT808_JT1078_0x1700_0x1701> | |||
{ | |||
/// <summary> | |||
/// 企业视频监控平台唯一编码,平台所属企业行政区域代码+平台公共编号 | |||
@@ -22,5 +24,21 @@ namespace JT809.Protocol.Test.JT1078 | |||
public override ushort SubMsgId => 0x1701; | |||
public override string Description => "测试"; | |||
public JT808_JT1078_0x1700_0x1701 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT808_JT1078_0x1700_0x1701 jT808_JT1078_0X1701 = new JT808_JT1078_0x1700_0x1701(); | |||
jT808_JT1078_0X1701.PlateFormId = reader.ReadArray(11).ToArray(); | |||
jT808_JT1078_0X1701.AuthorizeCode1 = reader.ReadArray(64).ToArray(); | |||
jT808_JT1078_0X1701.AuthorizeCode2 = reader.ReadArray(64).ToArray(); | |||
return jT808_JT1078_0X1701; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT808_JT1078_0x1700_0x1701 value, IJT809Config config) | |||
{ | |||
writer.WriteArray(value.PlateFormId); | |||
writer.WriteArray(value.AuthorizeCode1); | |||
writer.WriteArray(value.AuthorizeCode2); | |||
} | |||
} | |||
} |
@@ -1,24 +0,0 @@ | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.Test.JT1078 | |||
{ | |||
public class JT808_JT1078_0x1700_0x1701_Formatter : IJT809MessagePackFormatter<JT808_JT1078_0x1700_0x1701> | |||
{ | |||
public JT808_JT1078_0x1700_0x1701 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT808_JT1078_0x1700_0x1701 jT808_JT1078_0X1701 = new JT808_JT1078_0x1700_0x1701(); | |||
jT808_JT1078_0X1701.PlateFormId = reader.ReadArray(11).ToArray(); | |||
jT808_JT1078_0X1701.AuthorizeCode1 = reader.ReadArray(64).ToArray(); | |||
jT808_JT1078_0X1701.AuthorizeCode2 = reader.ReadArray(64).ToArray(); | |||
return jT808_JT1078_0X1701; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT808_JT1078_0x1700_0x1701 value, IJT809Config config) | |||
{ | |||
writer.WriteArray(value.PlateFormId); | |||
writer.WriteArray(value.AuthorizeCode1); | |||
writer.WriteArray(value.AuthorizeCode2); | |||
} | |||
} | |||
} |
@@ -1,50 +0,0 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
using System; | |||
namespace JT809.Protocol.Test.JT1078 | |||
{ | |||
public class JT808_JT1078_0x1700_Formatter : IJT809MessagePackFormatter<JT808_JT1078_0x1700> | |||
{ | |||
public JT808_JT1078_0x1700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT808_JT1078_0x1700 jT808_JT1078_0X1700 = new JT808_JT1078_0x1700(); | |||
jT808_JT1078_0X1700.SubBusinessType = reader.ReadUInt16(); | |||
try | |||
{ | |||
Type jT809SubBodiesImplType = config.SubBusinessTypeFactory.GetSubBodiesImplTypeBySubBusinessType(jT808_JT1078_0X1700.SubBusinessType); | |||
if (jT809SubBodiesImplType != null) | |||
jT808_JT1078_0X1700.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809SubBodiesImplType), | |||
ref reader, config); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{jT808_JT1078_0X1700.SubBusinessType.ToString()}"); | |||
} | |||
return jT808_JT1078_0X1700; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT808_JT1078_0x1700 value, IJT809Config config) | |||
{ | |||
try | |||
{ | |||
writer.WriteUInt16(value.SubBusinessType); | |||
if (value.SubBodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
config.GetMessagePackFormatterByType(value.SubBodies.GetType()), | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -69,7 +69,7 @@ namespace JT809.Protocol.Test.JT809Extensions | |||
VehicleNo = "粤A12345", | |||
VehicleColor = JT809VehicleColorType.黄色, | |||
SubBusinessType = JT809SubBusinessType.报警督办请求消息.ToUInt16Value(), | |||
SubBodies = JT809SubBusinessType.报警督办请求消息.Create_报警督办请求( | |||
SubBodies = JT809SubBusinessType.报警督办请求消息.Create_报警督办请求消息( | |||
new JT809_0x9400_0x9401 | |||
{ | |||
WarnSrc = JT809WarnSrc.车载终端, | |||
@@ -85,6 +85,8 @@ namespace JT809.Protocol.Test.JT809Extensions | |||
} | |||
); | |||
var hex = JT809Serializer.Serialize(jT809Package).ToHexString(); | |||
//5B0000007C0000068294000133EFB8010000000000270F94010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000A6565D | |||
//5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D | |||
Assert.Equal("5B000000920000068294000133EFB8010000000000270FD4C1413132333435000000000000000000000000000294010000005C010002000000005A01AC3F40123FFAA1000000005A01AC4D5003736D616C6C636869000000000000000031323334353637383930310000000000000000003132333435364071712E636F6D00000000000000000000000000000000000000BAD85D", hex); | |||
} | |||
} | |||
@@ -1,11 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.Interfaces; | |||
using System; | |||
using System.Collections.Concurrent; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
namespace JT809.Protocol | |||
{ | |||
@@ -188,16 +188,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.MessageBody.JT809_0x1007>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008 bodies) | |||
public static JT809Package Create_下级平台主动关闭主从链路通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x1008>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1008 bodies) | |||
@@ -206,24 +206,24 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
/// UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_下级平台主动关闭链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1008 bodies) | |||
public static JT809Package Create_下级平台主动关闭主从链路通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1008 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x1008>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// UP_EXG_MSG - 主链路动态信息交换消息 | |||
/// UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200 bodies) | |||
public static JT809Package Create_主链路车辆动态信息交换业务(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x1200>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// UP_EXG_MSG - 主链路动态信息交换消息 | |||
/// UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x1200 bodies) | |||
@@ -232,10 +232,10 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// UP_EXG_MSG - 主链路动态信息交换消息 | |||
/// UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_主链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1200 bodies) | |||
public static JT809Package Create_主链路车辆动态信息交换业务(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x1200 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x1200>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
@@ -370,16 +370,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9001>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
/// DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002 bodies) | |||
public static JT809Package Create_从链路连接应答信息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9002>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
/// DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9002 bodies) | |||
@@ -388,10 +388,10 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
/// DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路连接应答消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9002 bodies) | |||
public static JT809Package Create_从链路连接应答信息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9002 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9002>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
@@ -552,16 +552,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9008>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101 bodies) | |||
public static JT809Package Create_接收车辆定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9101>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9101 bodies) | |||
@@ -570,24 +570,24 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
/// DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_接收定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9101 bodies) | |||
public static JT809Package Create_接收车辆定位信息数量通知消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9101 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9101>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200 bodies) | |||
public static JT809Package Create_从链路车辆动态信息交换业务(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9200>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9200 bodies) | |||
@@ -596,24 +596,24 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路动态信息交换消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9200 bodies) | |||
public static JT809Package Create_从链路车辆动态信息交换业务(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9200 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9200>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300 bodies) | |||
public static JT809Package Create_从链路平台间信息交互业务(this JT809BusinessType jT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9300>(jT809BusinessType,bodies); | |||
} | |||
/// <summary> | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create(this JT809BusinessType jT809BusinessType, JT809.Protocol.MessageBody.JT809_0x9300 bodies) | |||
@@ -622,10 +622,10 @@ namespace JT809.Protocol.Extensions | |||
} | |||
/// <summary> | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
/// DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809Package Create_从链路平台间信息交互消息(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9300 bodies) | |||
public static JT809Package Create_从链路平台间信息交互业务(this JT809BusinessType jT809BusinessType,JT809Header jT809Header, JT809.Protocol.MessageBody.JT809_0x9300 bodies) | |||
{ | |||
return Create<JT809.Protocol.MessageBody.JT809_0x9300>(jT809BusinessType,jT809Header,bodies); | |||
} | |||
@@ -11,7 +11,7 @@ namespace JT809.Protocol.Extensions | |||
{ | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// 4608 | |||
/// UP_EXG_MSG_REGISTER - 上传车辆注册信息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -20,7 +20,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// 4608 | |||
/// UP_EXG_MSG_REAL_LOCATION - 实时上传车辆定位信息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -29,43 +29,43 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报 | |||
/// 4608 | |||
/// UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 Create_车辆定位信息自动补报(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 Create_车辆定位信息自动补报请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答 | |||
/// 4608 | |||
/// UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 Create_启动车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 Create_启动车辆定位信息交换应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答 | |||
/// 4608 | |||
/// UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 Create_结束车辆定位信息交换应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 Create_结束车辆定位信息交换应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求 | |||
/// 4608 | |||
/// UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 Create_申请交换指定车辆定位信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 Create_申请交换指定车辆定位信息请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// 4608 | |||
/// UP_EXG_MSG_APPLY_FOR_MONITOR_END - 取消交换指定车辆定位信息请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -74,7 +74,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// 4608 | |||
/// UP_EXG_MSG_APPLY_HISGNSSDATA_REQ - 补发车辆定位信息请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -83,34 +83,34 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报车辆驾驶员身份识别信息应答 | |||
/// 4608 | |||
/// UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报驾驶员身份识别信息应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A Create_上报车辆驾驶员身份识别信息应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A Create_上报驾驶员身份识别信息应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答 | |||
/// 4608 | |||
/// UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B Create_上报车辆电子运单应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B Create_上报车辆电子运单应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息 | |||
/// 4608 | |||
/// UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C Create_主动上报驾驶员身份信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C Create_主动上报驾驶员身份信息消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路动态信息交换消息 | |||
/// 4608 | |||
/// UP_EXG_MSG_REPORT_EWAYBILL_INFO - 主动上报车辆电子运单信息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -119,43 +119,43 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路平台间信息交互消息 | |||
/// UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答 | |||
/// 4864 | |||
/// UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 Create_平台查岗应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 Create_平台查岗应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路平台间信息交互消息 | |||
/// UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答 | |||
/// 4864 | |||
/// UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 Create_下发平台间报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 Create_下发平台间报文应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路报警信息交互消息 | |||
/// UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答 | |||
/// 5120 | |||
/// UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 Create_报警督办应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 Create_报警督办应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路报警信息交互消息 | |||
/// UP_WARN_MSG_ADPT_INFO - 上报报警信息 | |||
/// 5120 | |||
/// UP_WARN_MSG_ADPT_INFO - 上报报警信息消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 Create_上报报警信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 Create_上报报警信息消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路报警信息交互消息 | |||
/// 5120 | |||
/// UP_WARN_MSG_ADPT_TODO_INFO - 主动上报报警处理结果信息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -164,7 +164,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路车辆监管消息 | |||
/// 5376 | |||
/// UP_CTRL_MSG_MONITOR_VEHICLE_ACK - 车辆单向监听应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -173,7 +173,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路车辆监管消息 | |||
/// 5376 | |||
/// UP_CTRL_MSG_TAKE_PHOTO_ACK - 车辆拍照应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -182,25 +182,25 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路车辆监管消息 | |||
/// UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答 | |||
/// 5376 | |||
/// UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 Create_下发车辆报文应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 Create_下发车辆报文应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路车辆监管消息 | |||
/// UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答 | |||
/// 5376 | |||
/// UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 Create_上报车辆行驶记录应答(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 Create_上报车辆行驶记录应答消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路车辆监管消息 | |||
/// 5376 | |||
/// UP_CTRL_MSG_EMERGENCY_MONITORING_ACK - 车辆应急接入监管平台应答消息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -209,7 +209,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 主链路静态信息交换消息 | |||
/// 5632 | |||
/// UP_BASE_MSG_VEHICLE_ADDED_ACK - 补报车辆静态信息应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -218,43 +218,43 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 Create_交换车辆定位信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 Create_交换车辆定位信息消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 Create_车辆定位信息交换补发(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 Create_车辆定位信息交换补发消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 Create_交换车辆静态信息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 Create_交换车辆静态信息消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 Create_启动车辆定位信息交换请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 Create_启动车辆定位信息交换请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_RETURN_END - 结束车辆定位信息交换请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -263,7 +263,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_APPLY_FOR_MONITOR_STARTUP_ACK - 申请交换指定车辆定位信息应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -272,7 +272,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_APPLY_FOR_MONITOR_END_ACK - 取消交换指定车辆定位信息应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -281,7 +281,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_APPLY_HISGNSSDATA_ACK - 补发车辆定位信息应答 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -290,7 +290,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_REPORT_DRIVER_INFO - 上报车辆驾驶员身份识别信息请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -299,16 +299,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路动态信息交换消息 | |||
/// DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求 | |||
/// 37376 | |||
/// DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B Create_上报车辆电子运单请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B Create_上报车辆电子运单请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路平台间信息交互消息 | |||
/// 37632 | |||
/// DOWN_PLATFORM_MSG_POST_QUERY_REQ - 平台查岗请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -317,7 +317,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路平台间信息交互消息 | |||
/// 37632 | |||
/// DOWN_PLATFORM_MSG_INFO_REQ - 下发平台间报文请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -326,16 +326,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路报警信息交互消息 | |||
/// DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求 | |||
/// 37888 | |||
/// DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 Create_报警督办请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 Create_报警督办请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路报警信息交互消息 | |||
/// 37888 | |||
/// DOWN_WARN_MSG_INFORM_TIPS - 报警预警 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -344,7 +344,7 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路报警信息交互消息 | |||
/// 37888 | |||
/// DOWN_WARN_MSG_EXG_INFORM - 实时交换报警信息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -353,25 +353,25 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路车辆监管消息 | |||
/// DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求 | |||
/// 38144 | |||
/// DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 Create_车辆单向监听请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 Create_车辆单向监听请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路车辆监管消息 | |||
/// DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求 | |||
/// 38144 | |||
/// DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 Create_车辆拍照请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 Create_车辆拍照请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路车辆监管消息 | |||
/// 38144 | |||
/// DOWN_CTRL_MSG_TEXT_INFO - 下发车辆报文请求 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -380,16 +380,16 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路车辆监管消息 | |||
/// DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求 | |||
/// 38144 | |||
/// DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 Create_上报车辆行驶记录请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 Create_上报车辆行驶记录请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路车辆监管消息 | |||
/// 38144 | |||
/// DOWN_CTRL_MSG_EMERGENCY_MONITORING_REQ - 车辆应急接入监管平台请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
@@ -398,11 +398,11 @@ namespace JT809.Protocol.Extensions | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505>(jT809SubBusinessType,subBodies); | |||
} | |||
/// <summary> | |||
/// 从链路静态信息交换消息 | |||
/// DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求 | |||
/// 38400 | |||
/// DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求消息 | |||
/// auto-generated | |||
/// </summary> | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 Create_补报车辆静态信息请求(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 subBodies) | |||
public static JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 Create_补报车辆静态信息请求消息(this JT809SubBusinessType jT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601 subBodies) | |||
{ | |||
return Create<JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601>(jT809SubBusinessType,subBodies); | |||
} | |||
@@ -1,74 +0,0 @@ | |||
using JT809.Protocol.Attributes; | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using System; | |||
using System.Buffers; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using JT809.Protocol.Internal; | |||
using JT809.Protocol.Interfaces; | |||
using JT809.Protocol.MessagePack; | |||
using JT809.Protocol.MessageBody; | |||
namespace JT809.Protocol.Formatters | |||
{ | |||
public class JT809BodiesFormatter<TJT809Bodies> : IJT809MessagePackFormatter<TJT809Bodies> | |||
where TJT809Bodies: JT809ExchangeMessageBodies, new () | |||
{ | |||
public readonly static JT809BodiesFormatter<JT809_0x1200> Instance_0x1200 = new JT809BodiesFormatter<JT809_0x1200>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x1400> Instance_0x1400 = new JT809BodiesFormatter<JT809_0x1400>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x1500> Instance_0x1500 = new JT809BodiesFormatter<JT809_0x1500>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x1600> Instance_0x1600 = new JT809BodiesFormatter<JT809_0x1600>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x9200> Instance_0x9200 = new JT809BodiesFormatter<JT809_0x9200>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x9400> Instance_0x9400 = new JT809BodiesFormatter<JT809_0x9400>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x9500> Instance_0x9500 = new JT809BodiesFormatter<JT809_0x9500>(); | |||
public readonly static JT809BodiesFormatter<JT809_0x9600> Instance_0x9600 = new JT809BodiesFormatter<JT809_0x9600>(); | |||
public TJT809Bodies Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
TJT809Bodies jT809Bodies = new TJT809Bodies(); | |||
jT809Bodies.VehicleNo = reader.ReadString(21); | |||
jT809Bodies.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
jT809Bodies.SubBusinessType = reader.ReadUInt16(); | |||
jT809Bodies.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
Type jT809SubBodiesImplType = config.SubBusinessTypeFactory.GetSubBodiesImplTypeBySubBusinessType(jT809Bodies.SubBusinessType); | |||
if (jT809SubBodiesImplType != null) | |||
jT809Bodies.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809SubBodiesImplType), | |||
ref reader, config); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{jT809Bodies.SubBusinessType.ToString()}"); | |||
} | |||
return jT809Bodies; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, TJT809Bodies value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
config.GetMessagePackFormatterByType(value.SubBodies.GetType()), | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition()- subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,17 +1,12 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
namespace JT809.Protocol.Interfaces | |||
{ | |||
public interface IJT809BusinessTypeFactory | |||
public interface IJT809BusinessTypeFactory : IJT809ExternalRegister | |||
{ | |||
Type GetBodiesImplTypeByBusinessType(ushort businessType, uint msgGNSSCENTERID); | |||
IJT809BusinessTypeFactory SetMap<TJT809Bodies>(ushort businessType) | |||
where TJT809Bodies : JT809Bodies; | |||
IJT809BusinessTypeFactory SetMap(ushort businessType,Type bodiesImplType); | |||
IJT809BusinessTypeFactory ReplaceMap<TJT809Bodies>(ushort businessType) | |||
where TJT809Bodies : JT809Bodies; | |||
IJT809BusinessTypeFactory CustomSetMap<TJT809Bodies>(ushort businessType, uint msgGNSSCENTERID) | |||
where TJT809Bodies : JT809Bodies; | |||
IJT809BusinessTypeFactory CustomSetMap(ushort businessType,uint msgGNSSCENTERID,Type bodiesImplType); | |||
IDictionary<ushort, object> Map { get; } | |||
bool TryGetValue(ushort msgId, out object instance); | |||
IJT809BusinessTypeFactory SetMap<TJT809Bodies>() where TJT809Bodies : JT809Bodies; | |||
} | |||
} |
@@ -1,17 +1,12 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
namespace JT809.Protocol.Interfaces | |||
{ | |||
public interface IJT809SubBusinessTypeFactory | |||
public interface IJT809SubBusinessTypeFactory : IJT809ExternalRegister | |||
{ | |||
Type GetSubBodiesImplTypeBySubBusinessType(ushort subBusinessType); | |||
IJT809SubBusinessTypeFactory SetMap<TJT809SubBodies>(ushort subBusinessType) | |||
where TJT809SubBodies : JT809SubBodies; | |||
IJT809SubBusinessTypeFactory SetMap(ushort subBusinessType,Type subBodiesImplType); | |||
IJT809SubBusinessTypeFactory ReplaceMap<TJT809SubBodies>(ushort subBusinessType) | |||
where TJT809SubBodies : JT809SubBodies; | |||
IJT809SubBusinessTypeFactory CustomSetMap<TJT809SubBodies>(ushort subBusinessType) | |||
where TJT809SubBodies : JT809SubBodies; | |||
IJT809SubBusinessTypeFactory CustomSetMap(ushort subBusinessType,Type subBodiesImplType); | |||
IDictionary<ushort, object> Map { get; } | |||
bool TryGetValue(ushort msgId, out object instance); | |||
IJT809SubBusinessTypeFactory SetMap<TJT809SubBodies>() where TJT809SubBodies : JT809SubBodies; | |||
} | |||
} |
@@ -5,123 +5,74 @@ using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Interfaces; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Reflection; | |||
namespace JT808.Protocol.Internal | |||
{ | |||
internal class JT809BusinessTypeFactory : IJT809BusinessTypeFactory | |||
{ | |||
private readonly Dictionary<ushort, Type> map; | |||
private readonly Dictionary<uint, Dictionary<ushort, Type>> customMap; | |||
public IDictionary<ushort, object> Map { get; } | |||
internal JT809BusinessTypeFactory() | |||
{ | |||
map = new Dictionary<ushort, Type>(); | |||
customMap = new Dictionary<uint, Dictionary<ushort, Type>>(); | |||
InitMap(); | |||
Map = new Dictionary<ushort, object>(); | |||
InitMap(Assembly.GetExecutingAssembly()); | |||
} | |||
private void InitMap() | |||
private void InitMap(Assembly assembly) | |||
{ | |||
foreach (var item in Enum.GetNames(typeof(JT809BusinessType))) | |||
// var types = assembly.GetTypes().Where(w => w.BaseType == typeof(JT809Bodies)).Where(w=>w != typeof(JT809ExchangeMessageBodies)).ToList(); | |||
var types = assembly.GetTypes() | |||
.Where(w => w.BaseType == typeof(JT809Bodies) || w.BaseType == typeof(JT809ExchangeMessageBodies)).ToList(); | |||
foreach (var type in types) | |||
{ | |||
JT809BusinessType businessType = item.ToEnum<JT809BusinessType>(); | |||
if (!map.ContainsKey((ushort)businessType)) | |||
if (type.Name == nameof(JT809ExchangeMessageBodies)) continue; | |||
var instance = Activator.CreateInstance(type); | |||
ushort msgId = 0; | |||
try | |||
{ | |||
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = businessType.GetAttribute<JT809BodiesTypeAttribute>(); | |||
if (jT809BodiesTypeAttribute != null) | |||
{ | |||
map.Add((ushort)businessType, jT809BodiesTypeAttribute.JT809BodiesType); | |||
} | |||
msgId = (ushort)type.GetProperty(nameof(JT809Bodies.MsgId)).GetValue(instance); | |||
} | |||
} | |||
} | |||
public Type GetBodiesImplTypeByBusinessType(ushort businessType, uint msgGNSSCENTERID) | |||
{ | |||
//判断有无自定义消息Id类型 | |||
if (customMap.TryGetValue(msgGNSSCENTERID, out var dict)) | |||
{ | |||
if (dict != null) | |||
catch (Exception ex) | |||
{ | |||
return dict.TryGetValue(businessType, out Type bodiesImptType)? bodiesImptType:null; | |||
continue; | |||
} | |||
if (Map.ContainsKey(msgId)) | |||
{ | |||
throw new ArgumentException($"{type.FullName} {msgId} An element with the same key already exists."); | |||
} | |||
else | |||
{ | |||
Map.Add(msgId, instance); | |||
} | |||
} | |||
return map.TryGetValue(businessType, out Type type) ? type : null; | |||
} | |||
public IJT809BusinessTypeFactory SetMap<TJT809Bodies>(ushort businessType) | |||
where TJT809Bodies : JT809Bodies | |||
{ | |||
if (!map.ContainsKey(businessType)) | |||
{ | |||
map.Add(businessType, typeof(TJT809Bodies)); | |||
} | |||
return this; | |||
} | |||
public IJT809BusinessTypeFactory SetMap(ushort businessType, Type bodiesImplType) | |||
public bool TryGetValue(ushort msgId, out object instance) | |||
{ | |||
if (!map.ContainsKey(businessType)) | |||
{ | |||
map.Add(businessType, bodiesImplType); | |||
} | |||
return this; | |||
return Map.TryGetValue(msgId, out instance); | |||
} | |||
public IJT809BusinessTypeFactory ReplaceMap<TJT809Bodies>(ushort businessType) where TJT809Bodies : JT809Bodies | |||
public IJT809BusinessTypeFactory SetMap<TJT809Bodies>() where TJT809Bodies : JT809Bodies | |||
{ | |||
if (!map.ContainsKey(businessType)) | |||
Type type = typeof(TJT809Bodies); | |||
var instance = Activator.CreateInstance(type); | |||
var msgId = (ushort)type.GetProperty(nameof(JT809Bodies.MsgId)).GetValue(instance); | |||
if (Map.ContainsKey(msgId)) | |||
{ | |||
map.Add(businessType, typeof(TJT809Bodies)); | |||
throw new ArgumentException($"{type.FullName} {msgId} An element with the same key already exists."); | |||
} | |||
else | |||
{ | |||
map[businessType] = typeof(TJT809Bodies); | |||
Map.Add(msgId, instance); | |||
} | |||
return this; | |||
} | |||
public IJT809BusinessTypeFactory CustomSetMap<TJT809Bodies>(ushort businessType, uint msgGNSSCENTERID) where TJT809Bodies : JT809Bodies | |||
{ | |||
if (!customMap.TryGetValue(msgGNSSCENTERID, out var dict)) | |||
{ | |||
if (dict == null) | |||
{ | |||
Dictionary<ushort, Type> tmp = new Dictionary<ushort, Type>(); | |||
tmp.Add(businessType, typeof(TJT809Bodies)); | |||
customMap.Add(businessType, tmp); | |||
} | |||
else | |||
{ | |||
if (!dict.ContainsKey(businessType)) | |||
{ | |||
dict.Add(businessType, typeof(TJT809Bodies)); | |||
} | |||
} | |||
} | |||
return this; | |||
} | |||
public IJT809BusinessTypeFactory CustomSetMap(ushort businessType, uint msgGNSSCENTERID, Type bodiesImplType) | |||
public void Register(Assembly externalAssembly) | |||
{ | |||
if (!customMap.TryGetValue(msgGNSSCENTERID, out var dict)) | |||
{ | |||
if (dict == null) | |||
{ | |||
Dictionary<ushort, Type> tmp = new Dictionary<ushort, Type>(); | |||
tmp.Add(businessType, bodiesImplType); | |||
customMap.Add(businessType, tmp); | |||
} | |||
else | |||
{ | |||
if (!dict.ContainsKey(businessType)) | |||
{ | |||
dict.Add(businessType, bodiesImplType); | |||
} | |||
} | |||
} | |||
return this; | |||
InitMap(externalAssembly); | |||
} | |||
} | |||
} |
@@ -33,6 +33,10 @@ namespace JT809.Protocol.Internal | |||
var genericImplType = firstType.GetGenericArguments().FirstOrDefault(); | |||
if (genericImplType != null) | |||
{ | |||
if (genericImplType.GUID == Guid.Empty) | |||
{ | |||
continue; | |||
} | |||
if (!FormatterDict.ContainsKey(genericImplType.GUID)) | |||
{ | |||
FormatterDict.Add(genericImplType.GUID, Activator.CreateInstance(genericImplType)); | |||
@@ -5,91 +5,71 @@ using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Interfaces; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Reflection; | |||
namespace JT808.Protocol.Internal | |||
{ | |||
internal class JT809SubBusinessTypeFactory : IJT809SubBusinessTypeFactory | |||
{ | |||
private readonly Dictionary<ushort, Type> map; | |||
public IDictionary<ushort, object> Map { get; } | |||
internal JT809SubBusinessTypeFactory() | |||
{ | |||
map = new Dictionary<ushort, Type>(); | |||
InitMap(); | |||
Map = new Dictionary<ushort, object>(); | |||
InitMap(Assembly.GetExecutingAssembly()); | |||
} | |||
private void InitMap() | |||
private void InitMap(Assembly assembly) | |||
{ | |||
foreach (var item in Enum.GetNames(typeof(JT809SubBusinessType))) | |||
var types = assembly.GetTypes().Where(w => w.BaseType == typeof(JT809SubBodies)).ToList(); | |||
foreach (var type in types) | |||
{ | |||
JT809SubBusinessType subBusinessType = item.ToEnum<JT809SubBusinessType>(); | |||
if (!map.ContainsKey((ushort)subBusinessType)) | |||
var instance = Activator.CreateInstance(type); | |||
ushort msgId = 0; | |||
try | |||
{ | |||
JT809BodiesTypeAttribute jT809BodiesTypeAttribute = subBusinessType.GetAttribute<JT809BodiesTypeAttribute>(); | |||
if (jT809BodiesTypeAttribute != null) | |||
{ | |||
map.Add((ushort)subBusinessType, jT809BodiesTypeAttribute.JT809BodiesType); | |||
} | |||
msgId = (ushort)type.GetProperty(nameof(JT809SubBodies.SubMsgId)).GetValue(instance); | |||
} | |||
catch (Exception ex) | |||
{ | |||
continue; | |||
} | |||
if (Map.ContainsKey(msgId)) | |||
{ | |||
throw new ArgumentException($"{type.FullName} {msgId} An element with the same key already exists."); | |||
} | |||
else | |||
{ | |||
Map.Add(msgId, instance); | |||
} | |||
} | |||
} | |||
public Type GetSubBodiesImplTypeBySubBusinessType(ushort subBusinessType) | |||
{ | |||
return map.TryGetValue(subBusinessType, out Type type) ? type : null; | |||
} | |||
public IJT809SubBusinessTypeFactory SetMap<TJT809SubBodies>(ushort subBusinessType) | |||
where TJT809SubBodies : JT809SubBodies | |||
{ | |||
if (!map.ContainsKey(subBusinessType)) | |||
{ | |||
map.Add(subBusinessType, typeof(TJT809SubBodies)); | |||
} | |||
return this; | |||
} | |||
public IJT809SubBusinessTypeFactory SetMap(ushort subBusinessType, Type subBodiesImplType) | |||
{ | |||
if (!map.ContainsKey(subBusinessType)) | |||
{ | |||
map.Add(subBusinessType, subBodiesImplType); | |||
} | |||
return this; | |||
} | |||
public IJT809SubBusinessTypeFactory ReplaceMap<TJT809SubBodies>(ushort subBusinessType) where TJT809SubBodies : JT809SubBodies | |||
public bool TryGetValue(ushort msgId, out object instance) | |||
{ | |||
if (!map.ContainsKey(subBusinessType)) | |||
{ | |||
map.Add(subBusinessType, typeof(TJT809SubBodies)); | |||
} | |||
else | |||
{ | |||
map[subBusinessType] = typeof(TJT809SubBodies); | |||
} | |||
return this; | |||
return Map.TryGetValue(msgId, out instance); | |||
} | |||
public IJT809SubBusinessTypeFactory CustomSetMap<TJT809SubBodies>(ushort subBusinessType) where TJT809SubBodies : JT809SubBodies | |||
public IJT809SubBusinessTypeFactory SetMap<TJT809SubBodies>() where TJT809SubBodies : JT809SubBodies | |||
{ | |||
if (!map.ContainsKey(subBusinessType)) | |||
Type type = typeof(TJT809SubBodies); | |||
var instance = Activator.CreateInstance(type); | |||
var msgId = (ushort)type.GetProperty(nameof(JT809SubBodies.SubMsgId)).GetValue(instance); | |||
if (Map.ContainsKey(msgId)) | |||
{ | |||
map.Add(subBusinessType, typeof(TJT809SubBodies)); | |||
throw new ArgumentException($"{type.FullName} {msgId} An element with the same key already exists."); | |||
} | |||
else | |||
{ | |||
map[subBusinessType] = typeof(TJT809SubBodies); | |||
Map.Add(msgId, instance); | |||
} | |||
return this; | |||
} | |||
public IJT809SubBusinessTypeFactory CustomSetMap(ushort subBusinessType, Type subBodiesImplType) | |||
public void Register(Assembly externalAssembly) | |||
{ | |||
if (!map.ContainsKey(subBusinessType)) | |||
{ | |||
map.Add(subBusinessType, subBodiesImplType); | |||
} | |||
return this; | |||
InitMap(externalAssembly); | |||
} | |||
} | |||
} |
@@ -144,4 +144,8 @@ | |||
</Compile> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" /> | |||
</ItemGroup> | |||
</Project> |
@@ -292,39 +292,39 @@ | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_下级平台主动关闭链路通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_下级平台主动关闭主从链路通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008)"> | |||
<summary> | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1008)"> | |||
<summary> | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_下级平台主动关闭链路通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x1008)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_下级平台主动关闭主从链路通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x1008)"> | |||
<summary> | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭链路通知消息 | |||
UP_CLOSELINK_INFORM - 下级平台主动关闭主从链路通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_主链路动态信息交换消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_主链路车辆动态信息交换业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200)"> | |||
<summary> | |||
UP_EXG_MSG - 主链路动态信息交换消息 | |||
UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x1200)"> | |||
<summary> | |||
UP_EXG_MSG - 主链路动态信息交换消息 | |||
UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_主链路动态信息交换消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x1200)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_主链路车辆动态信息交换业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x1200)"> | |||
<summary> | |||
UP_EXG_MSG - 主链路动态信息交换消息 | |||
UP_EXG_MSG - 主链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
@@ -418,21 +418,21 @@ | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路连接应答消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路连接应答信息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002)"> | |||
<summary> | |||
DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9002)"> | |||
<summary> | |||
DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路连接应答消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9002)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路连接应答信息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9002)"> | |||
<summary> | |||
DOWN_CONNECT_RSP - 从链路连接应答消息 | |||
DOWN_CONNECT_RSP - 从链路连接应答信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
@@ -544,57 +544,57 @@ | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_接收定位信息数量通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_接收车辆定位信息数量通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101)"> | |||
<summary> | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9101)"> | |||
<summary> | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_接收定位信息数量通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9101)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_接收车辆定位信息数量通知消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9101)"> | |||
<summary> | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收定位信息数量通知消息 | |||
DOWN_TOTAL_RECV_BACK_MSG - 接收车辆定位信息数量通知消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路动态信息交换消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路车辆动态信息交换业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200)"> | |||
<summary> | |||
DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9200)"> | |||
<summary> | |||
DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路动态信息交换消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9200)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路车辆动态信息交换业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9200)"> | |||
<summary> | |||
DOWN_EXG_MSG - 从链路动态信息交换消息 | |||
DOWN_EXG_MSG - 从链路车辆动态信息交换业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路平台间信息交互消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路平台间信息交互业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300)"> | |||
<summary> | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.MessageBody.JT809_0x9300)"> | |||
<summary> | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路平台间信息交互消息(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9300)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809PackageExtensions.Create_从链路平台间信息交互业务(JT809.Protocol.Enums.JT809BusinessType,JT809.Protocol.JT809Header,JT809.Protocol.MessageBody.JT809_0x9300)"> | |||
<summary> | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互消息 | |||
DOWN_PLATFORM_MSG - 从链路平台间信息交互业务 | |||
auto-generated | |||
</summary> | |||
</member> | |||
@@ -660,312 +660,317 @@ | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上传车辆注册信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1201)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
4608 | |||
UP_EXG_MSG_REGISTER - 上传车辆注册信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_实时上传车辆定位信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1202)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
4608 | |||
UP_EXG_MSG_REAL_LOCATION - 实时上传车辆定位信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆定位信息自动补报(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆定位信息自动补报请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1203)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报 | |||
4608 | |||
UP_EXG_MSG_HISTORY_LOCATION - 车辆定位信息自动补报请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_启动车辆定位信息交换应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_启动车辆定位信息交换应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1205)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答 | |||
4608 | |||
UP_EXG_MSG_RETURN_STARTUP_ACK - 启动车辆定位信息交换应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_结束车辆定位信息交换应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_结束车辆定位信息交换应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1206)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答 | |||
4608 | |||
UP_EXG_MSG_RETURN_END_ACK - 结束车辆定位信息交换应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_申请交换指定车辆定位信息请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_申请交换指定车辆定位信息请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1207)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求 | |||
4608 | |||
UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP - 申请交换指定车辆定位信息请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_取消交换指定车辆定位信息请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
4608 | |||
UP_EXG_MSG_APPLY_FOR_MONITOR_END - 取消交换指定车辆定位信息请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_补发车辆定位信息请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x1209)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
4608 | |||
UP_EXG_MSG_APPLY_HISGNSSDATA_REQ - 补发车辆定位信息请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆驾驶员身份识别信息应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报驾驶员身份识别信息应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120A)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报车辆驾驶员身份识别信息应答 | |||
4608 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO_ACK - 上报驾驶员身份识别信息应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆电子运单应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆电子运单应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120B)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答 | |||
4608 | |||
UP_EXG_MSG_TAKE_EWAYBILL_ACK - 上报车辆电子运单应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_主动上报驾驶员身份信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_主动上报驾驶员身份信息消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120C)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息 | |||
4608 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO - 主动上报驾驶员身份信息消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_主动上报车辆电子运单信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1200_0x120D)"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
4608 | |||
UP_EXG_MSG_REPORT_EWAYBILL_INFO - 主动上报车辆电子运单信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_平台查岗应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_平台查岗应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1301)"> | |||
<summary> | |||
主链路平台间信息交互消息 | |||
UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答 | |||
4864 | |||
UP_PLATFORM_MSG_POST_QUERY_ACK - 平台查岗应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发平台间报文应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发平台间报文应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1300_0x1302)"> | |||
<summary> | |||
主链路平台间信息交互消息 | |||
UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答 | |||
4864 | |||
UP_PLATFORM_MSG_INFO_ACK - 下发平台间报文应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_报警督办应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_报警督办应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1401)"> | |||
<summary> | |||
主链路报警信息交互消息 | |||
UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答 | |||
5120 | |||
UP_WARN_MSG_URGE_TODO_ACK - 报警督办应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报报警信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报报警信息消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1402)"> | |||
<summary> | |||
主链路报警信息交互消息 | |||
UP_WARN_MSG_ADPT_INFO - 上报报警信息 | |||
5120 | |||
UP_WARN_MSG_ADPT_INFO - 上报报警信息消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_主动上报报警处理结果信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1400_0x1403)"> | |||
<summary> | |||
主链路报警信息交互消息 | |||
5120 | |||
UP_WARN_MSG_ADPT_TODO_INFO - 主动上报报警处理结果信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆单向监听应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1501)"> | |||
<summary> | |||
主链路车辆监管消息 | |||
5376 | |||
UP_CTRL_MSG_MONITOR_VEHICLE_ACK - 车辆单向监听应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆拍照应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1502)"> | |||
<summary> | |||
主链路车辆监管消息 | |||
5376 | |||
UP_CTRL_MSG_TAKE_PHOTO_ACK - 车辆拍照应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发车辆报文应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发车辆报文应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1503)"> | |||
<summary> | |||
主链路车辆监管消息 | |||
UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答 | |||
5376 | |||
UP_CTRL_MSG_TEXT_INFO_ACK - 下发车辆报文应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆行驶记录应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆行驶记录应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1504)"> | |||
<summary> | |||
主链路车辆监管消息 | |||
UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答 | |||
5376 | |||
UP_CTRL_MSG_TAKE_TRAVEL_ACK - 上报车辆行驶记录应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆应急接入监管平台应答消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1500_0x1505)"> | |||
<summary> | |||
主链路车辆监管消息 | |||
5376 | |||
UP_CTRL_MSG_EMERGENCY_MONITORING_ACK - 车辆应急接入监管平台应答消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_补报车辆静态信息应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x1600_0x1601)"> | |||
<summary> | |||
主链路静态信息交换消息 | |||
5632 | |||
UP_BASE_MSG_VEHICLE_ADDED_ACK - 补报车辆静态信息应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_交换车辆定位信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_交换车辆定位信息消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9202)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息 | |||
37376 | |||
DOWN_EXG_MSG_CAR_LOCATION - 交换车辆定位信息消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆定位信息交换补发(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆定位信息交换补发消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9203)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发 | |||
37376 | |||
DOWN_EXG_MSG_HISTORY_ARCOSSAREA - 车辆定位信息交换补发消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_交换车辆静态信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_交换车辆静态信息消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9204)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息 | |||
37376 | |||
DOWN_EXG_MSG_CAR_INFO - 交换车辆静态信息消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_启动车辆定位信息交换请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_启动车辆定位信息交换请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9205)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求 | |||
37376 | |||
DOWN_EXG_MSG_RETURN_STARTUP - 启动车辆定位信息交换请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_结束车辆定位信息交换请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9206)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
37376 | |||
DOWN_EXG_MSG_RETURN_END - 结束车辆定位信息交换请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_申请交换指定车辆定位信息应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9207)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
37376 | |||
DOWN_EXG_MSG_APPLY_FOR_MONITOR_STARTUP_ACK - 申请交换指定车辆定位信息应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_取消交换指定车辆定位信息应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9208)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
37376 | |||
DOWN_EXG_MSG_APPLY_FOR_MONITOR_END_ACK - 取消交换指定车辆定位信息应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_补发车辆定位信息应答(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
37376 | |||
DOWN_EXG_MSG_APPLY_HISGNSSDATA_ACK - 补发车辆定位信息应答 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆驾驶员身份识别信息请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920A)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
37376 | |||
DOWN_EXG_MSG_REPORT_DRIVER_INFO - 上报车辆驾驶员身份识别信息请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆电子运单请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆电子运单请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9200_0x920B)"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求 | |||
37376 | |||
DOWN_EXG_MSG_TAKE_EWAYBILL_REQ - 上报车辆电子运单请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_平台查岗请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9301)"> | |||
<summary> | |||
从链路平台间信息交互消息 | |||
37632 | |||
DOWN_PLATFORM_MSG_POST_QUERY_REQ - 平台查岗请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发平台间报文请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9300_0x9302)"> | |||
<summary> | |||
从链路平台间信息交互消息 | |||
37632 | |||
DOWN_PLATFORM_MSG_INFO_REQ - 下发平台间报文请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_报警督办请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_报警督办请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9401)"> | |||
<summary> | |||
从链路报警信息交互消息 | |||
DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求 | |||
37888 | |||
DOWN_WARN_MSG_URGE_TODO_REQ - 报警督办请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_报警预警(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9402)"> | |||
<summary> | |||
从链路报警信息交互消息 | |||
37888 | |||
DOWN_WARN_MSG_INFORM_TIPS - 报警预警 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_实时交换报警信息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9400_0x9403)"> | |||
<summary> | |||
从链路报警信息交互消息 | |||
37888 | |||
DOWN_WARN_MSG_EXG_INFORM - 实时交换报警信息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆单向监听请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆单向监听请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9501)"> | |||
<summary> | |||
从链路车辆监管消息 | |||
DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求 | |||
38144 | |||
DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ - 车辆单向监听请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆拍照请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆拍照请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9502)"> | |||
<summary> | |||
从链路车辆监管消息 | |||
DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求 | |||
38144 | |||
DOWN_CTRL_MSG_TAKE_PHOTO_REQ - 车辆拍照请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_下发车辆报文请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9503)"> | |||
<summary> | |||
从链路车辆监管消息 | |||
38144 | |||
DOWN_CTRL_MSG_TEXT_INFO - 下发车辆报文请求 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆行驶记录请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_上报车辆行驶记录请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9504)"> | |||
<summary> | |||
从链路车辆监管消息 | |||
DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求 | |||
38144 | |||
DOWN_CTRL_MSG_TAKE_TRAVEL_REQ - 上报车辆行驶记录请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_车辆应急接入监管平台请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9500_0x9505)"> | |||
<summary> | |||
从链路车辆监管消息 | |||
38144 | |||
DOWN_CTRL_MSG_EMERGENCY_MONITORING_REQ - 车辆应急接入监管平台请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_补报车辆静态信息请求(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601)"> | |||
<member name="M:JT809.Protocol.Extensions.JT809SubPackageExtensions.Create_补报车辆静态信息请求消息(JT809.Protocol.Enums.JT809SubBusinessType,JT809.Protocol.SubMessageBody.JT809_0x9600_0x9601)"> | |||
<summary> | |||
从链路静态信息交换消息 | |||
DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求 | |||
38400 | |||
DOWN_BASE_MSG_VEHICLE_ADDED - 补报车辆静态信息请求消息 | |||
auto-generated | |||
</summary> | |||
</member> | |||
<member name="T:JT809.Protocol.Interfaces.IJT809_2019_Version"> | |||
<summary> | |||
只用来标识2019版本增删改情况 | |||
</summary> | |||
</member> | |||
<member name="P:JT809.Protocol.IJT809Config.MsgSNDistributed"> | |||
<summary> | |||
消息流水号 | |||
@@ -1005,6 +1010,13 @@ | |||
<param name="externalAssemblies"></param> | |||
<returns></returns> | |||
</member> | |||
<member name="P:JT809.Protocol.JT809Bodies.SkipSerialization"> | |||
<summary> | |||
跳过数据体序列化 | |||
默认不跳过 | |||
当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。 | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.JT809Constants.DateLimitYear"> | |||
<summary> | |||
日期限制于2000年 | |||
@@ -1147,6 +1159,13 @@ | |||
子业务数据体 | |||
</summary> | |||
</member> | |||
<member name="P:JT809.Protocol.JT809SubBodies.SkipSerialization"> | |||
<summary> | |||
跳过数据体序列化 | |||
默认不跳过 | |||
当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。 | |||
</summary> | |||
</member> | |||
<member name="T:JT809.Protocol.MessageBody.JT809_0x1001"> | |||
<summary> | |||
主链路登录请求消息 | |||
@@ -1765,7 +1784,7 @@ | |||
</member> | |||
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x1200_0x1208"> | |||
<summary> | |||
取消交换指定车辆定位信息请 | |||
取消交换指定车辆定位信息请求 | |||
<para>子业务类型标识:UP_EXG_MSG_APPLY_F0R_MONIOR_END</para> | |||
<para>描述:下级平台上传该命令给上级平台,取消之前申请监控的特殊车辆</para> | |||
</summary> | |||
@@ -2198,7 +2217,7 @@ | |||
</member> | |||
<member name="T:JT809.Protocol.SubMessageBody.JT809_0x9200_0x9209"> | |||
<summary> | |||
取消交换指定车辆定位信息应答 | |||
补发车辆定位信息应答 | |||
<para>子业务类型标识:DOWN_EXG_MSG_APPLY_FOR_MONITOR_END_ACK</para> | |||
</summary> | |||
</member> | |||
@@ -2802,9 +2821,9 @@ | |||
UP_DISCONNECT_INFORM | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.下级平台主动关闭链路通知消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.下级平台主动关闭主从链路通知消息"> | |||
<summary> | |||
下级平台主动关闭链路通知消息 | |||
下级平台主动关闭主从链路通知消息 | |||
UP_CLOSELINK_INFORM | |||
</summary> | |||
</member> | |||
@@ -2814,9 +2833,9 @@ | |||
DOWN_CONNECT_REQ | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路连接应答消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路连接应答信息"> | |||
<summary> | |||
从链路连接应答消息 | |||
从链路连接应答信息 | |||
DOWN_CONNECT_RSP | |||
</summary> | |||
</member> | |||
@@ -2856,21 +2875,21 @@ | |||
DOWN_CLOSELINK_INFORM | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.接收定位信息数量通知消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.接收车辆定位信息数量通知消息"> | |||
<summary> | |||
接收定位信息数量通知消息 | |||
接收车辆定位信息数量通知消息 | |||
DOWN_TOTAL_RECV_BACK_MSG | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.主链路动态信息交换消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.主链路车辆动态信息交换业务"> | |||
<summary> | |||
主链路动态信息交换消息 | |||
UP_EXG_MSG | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路动态信息交换消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路车辆动态信息交换业务"> | |||
<summary> | |||
从链路动态信息交换消息 | |||
从链路车辆动态信息交换业务 | |||
DOWN_EXG_MSG | |||
</summary> | |||
</member> | |||
@@ -2880,9 +2899,9 @@ | |||
UP_PLATFORM_MSG | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路平台间信息交互消息"> | |||
<member name="F:JT809.Protocol.Enums.JT809BusinessType.从链路平台间信息交互业务"> | |||
<summary> | |||
从链路平台间信息交互消息 | |||
从链路平台间信息交互业务 | |||
DOWN_PLATFORM_MSG | |||
</summary> | |||
</member> | |||
@@ -2939,25 +2958,25 @@ | |||
UP_EXG_MSG_REAL_LOCATION | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆定位信息自动补报"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆定位信息自动补报请求消息"> | |||
<summary> | |||
车辆定位信息自动补报 | |||
车辆定位信息自动补报请求消息 | |||
UP_EXG_MSG_HISTORY_LOCATION | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.启动车辆定位信息交换应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.启动车辆定位信息交换应答消息"> | |||
<summary> | |||
启动车辆定位信息交换应答 | |||
启动车辆定位信息交换应答消息 | |||
UP_EXG_MSG_RETURN_STARTUP_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.结束车辆定位信息交换应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.结束车辆定位信息交换应答消息"> | |||
<summary> | |||
结束车辆定位信息交换应答 | |||
UP_EXG_MSG_RETURN_END_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.申请交换指定车辆定位信息请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.申请交换指定车辆定位信息请求消息"> | |||
<summary> | |||
申请交换指定车辆定位信息请求 | |||
UP_EXG_MSG_APPLY_FOR_MONITOR_STARTUP | |||
@@ -2975,21 +2994,21 @@ | |||
UP_EXG_MSG_APPLY_HISGNSSDATA_REQ | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆驾驶员身份识别信息应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报驾驶员身份识别信息应答消息"> | |||
<summary> | |||
上报车辆驾驶员身份识别信息应答 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆电子运单应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆电子运单应答消息"> | |||
<summary> | |||
上报车辆电子运单应答 | |||
UP_EXG_MSG_TAKE_EWAYBILL_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.主动上报驾驶员身份信息"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.主动上报驾驶员身份信息消息"> | |||
<summary> | |||
主动上报驾驶员身份信息 | |||
主动上报驾驶员身份信息消息 | |||
UP_EXG_MSG_REPORT_DRIVER_INFO | |||
</summary> | |||
</member> | |||
@@ -2999,27 +3018,27 @@ | |||
UP_EXG_MSG_REPORT_EWAYBILL_INFO | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.交换车辆定位信息"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.交换车辆定位信息消息"> | |||
<summary> | |||
交换车辆定位信息 | |||
DOWN_EXG_MSG_CAR_LOCATION | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆定位信息交换补发"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆定位信息交换补发消息"> | |||
<summary> | |||
车辆定位信息交换补发 | |||
DOWN_EXG_MSG_HISTORY_ARCOSSAREA | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.交换车辆静态信息"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.交换车辆静态信息消息"> | |||
<summary> | |||
交换车辆静态信息 | |||
DOWN_EXG_MSG_CAR_INFO | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.启动车辆定位信息交换请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.启动车辆定位信息交换请求消息"> | |||
<summary> | |||
启动车辆定位信息交换请求 | |||
启动车辆定位信息交换请求消息 | |||
DOWN_EXG_MSG_RETURN_STARTUP | |||
</summary> | |||
</member> | |||
@@ -3052,21 +3071,21 @@ | |||
DOWN_EXG_MSG_REPORT_DRIVER_INFO | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆电子运单请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆电子运单请求消息"> | |||
<summary> | |||
上报车辆电子运单请求 | |||
DOWN_EXG_MSG_TAKE_EWAYBILL_REQ | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.平台查岗应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.平台查岗应答消息"> | |||
<summary> | |||
平台查岗应答 | |||
平台查岗应答消息 | |||
UP_PLATFORM_MSG_POST_QUERY_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.下发平台间报文应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.下发平台间报文应答消息"> | |||
<summary> | |||
下发平台间报文应答 | |||
下发平台间报文应答消息 | |||
UP_PLATFORM_MSG_INFO_ACK | |||
</summary> | |||
</member> | |||
@@ -3082,15 +3101,15 @@ | |||
DOWN_PLATFORM_MSG_INFO_REQ | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.报警督办应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.报警督办应答消息"> | |||
<summary> | |||
报警督办应答 | |||
报警督办应答消息 | |||
UP_WARN_MSG_URGE_TODO_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报报警信息"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报报警信息消息"> | |||
<summary> | |||
上报报警信息 | |||
上报报警信息消息 | |||
UP_WARN_MSG_ADPT_INFO | |||
</summary> | |||
</member> | |||
@@ -3100,9 +3119,9 @@ | |||
UP_WARN_MSG_ADPT_TODO_INFO | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.报警督办请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.报警督办请求消息"> | |||
<summary> | |||
报警督办请求 | |||
报警督办请求消息 | |||
DOWN_WARN_MSG_URGE_TODO_REQ | |||
</summary> | |||
</member> | |||
@@ -3130,15 +3149,15 @@ | |||
UP_CTRL_MSG_TAKE_PHOTO_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.下发车辆报文应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.下发车辆报文应答消息"> | |||
<summary> | |||
下发车辆报文应答 | |||
下发车辆报文应答消息 | |||
UP_CTRL_MSG_TEXT_INFO_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆行驶记录应答"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆行驶记录应答消息"> | |||
<summary> | |||
上报车辆行驶记录应答 | |||
上报车辆行驶记录应答消息 | |||
UP_CTRL_MSG_TAKE_TRAVEL_ACK | |||
</summary> | |||
</member> | |||
@@ -3148,15 +3167,15 @@ | |||
UP_CTRL_MSG_EMERGENCY_MONITORING_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆单向监听请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆单向监听请求消息"> | |||
<summary> | |||
车辆单向监听请求 | |||
车辆单向监听请求消息 | |||
DOWN_CTRL_MSG_MONITOR_VEHICLE_REQ | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆拍照请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.车辆拍照请求消息"> | |||
<summary> | |||
车辆拍照请求 | |||
车辆拍照请求消息 | |||
DOWN_CTRL_MSG_TAKE_PHOTO_REQ | |||
</summary> | |||
</member> | |||
@@ -3166,9 +3185,9 @@ | |||
DOWN_CTRL_MSG_TEXT_INFO | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆行驶记录请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.上报车辆行驶记录请求消息"> | |||
<summary> | |||
上报车辆行驶记录请求 | |||
上报车辆行驶记录请求消息 | |||
DOWN_CTRL_MSG_TAKE_TRAVEL_REQ | |||
</summary> | |||
</member> | |||
@@ -3184,9 +3203,9 @@ | |||
UP_BASE_MSG_VEHICLE_ADDED_ACK | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.补报车辆静态信息请求"> | |||
<member name="F:JT809.Protocol.Enums.JT809SubBusinessType.补报车辆静态信息请求消息"> | |||
<summary> | |||
补报车辆静态信息请求 | |||
补报车辆静态信息请求消息 | |||
DOWN_BASE_MSG_VEHICLE_ADDED | |||
</summary> | |||
</member> | |||
@@ -3305,6 +3324,21 @@ | |||
错误代码 | |||
</summary> | |||
</member> | |||
<member name="T:JT809.Protocol.Enums.JT809_LinkType"> | |||
<summary> | |||
链路类型 | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809_LinkType.main"> | |||
<summary> | |||
主链路 | |||
</summary> | |||
</member> | |||
<member name="F:JT809.Protocol.Enums.JT809_LinkType.subordinate"> | |||
<summary> | |||
从链路 | |||
</summary> | |||
</member> | |||
<member name="T:JT809.Protocol.Enums.JT809_VehiclePositionEncrypt"> | |||
<summary> | |||
定位信息是否使用国家测绘局批准的地图保密插件进行加密。 | |||
@@ -40,8 +40,7 @@ namespace JT809.Protocol | |||
// 3.初始化消息头 | |||
try | |||
{ | |||
//todo:JT809HeaderFormatter | |||
//jT809Package.Header = JT809HeaderFormatter.Instance.Deserialize(ref reader, config); | |||
jT809Package.Header = config.GetMessagePackFormatter<JT809Header>().Deserialize(ref reader, config); | |||
} | |||
catch (Exception ex) | |||
{ | |||
@@ -69,7 +68,7 @@ namespace JT809.Protocol | |||
} | |||
catch (Exception ex) | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{reader.ReadCurrentRemainContentLength().ToString()}", ex); | |||
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{reader.ReadCurrentRemainContentLength()}", ex); | |||
} | |||
} | |||
jT809Package.CRCCode = reader.CalculateCheckXorCode; | |||
@@ -47,45 +47,39 @@ namespace JT809.Protocol | |||
// 3.初始化消息头 | |||
try | |||
{ | |||
//todo:JT809HeaderFormatter | |||
//jT809Package.Header = JT809HeaderFormatter.Instance.Deserialize(ref reader, config); | |||
jT809Package.Header = config.GetMessagePackFormatter<JT809Header>().Deserialize(ref reader, config); | |||
} | |||
catch (Exception ex) | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.HeaderParseError, $"offset>{reader.ReadCurrentRemainContentLength().ToString()}", ex); | |||
} | |||
throw new JT809Exception(JT809ErrorCode.HeaderParseError, $"offset>{reader.ReadCurrentRemainContentLength()}", ex); | |||
} | |||
// 5.数据体处理 | |||
// 5.1 判断是否有数据体(总长度-固定长度)> 0 | |||
if ((jT809Package.Header.MsgLength - JT809Package.FixedByteLength) > 0) | |||
if ((jT809Package.Header.MsgLength - FixedByteLength) > 0) | |||
{ | |||
try | |||
if (config.BusinessTypeFactory.TryGetValue(jT809Package.Header.BusinessType, out object instance)) | |||
{ | |||
Type jT809BodiesImplType = config.BusinessTypeFactory.GetBodiesImplTypeByBusinessType(jT809Package.Header.BusinessType, jT809Package.Header.MsgGNSSCENTERID); | |||
if (jT809BodiesImplType != null) | |||
try | |||
{ | |||
// 5.2 是否加密 | |||
switch (jT809Package.Header.EncryptFlag) | |||
{ | |||
case JT809Header_Encrypt.None: | |||
// 5.3 处理消息体 | |||
jT809Package.Bodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809BodiesImplType), | |||
ref reader, config); | |||
jT809Package.Bodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(instance,ref reader, config); | |||
break; | |||
case JT809Header_Encrypt.Common: | |||
// 5.4. 处理加密消息体 | |||
byte[] bodiesData = config.Encrypt.Decrypt(reader.ReadContent(), config.EncryptOptions, jT809Package.Header.EncryptKey); | |||
JT809MessagePackReader bodiesReader = new JT809MessagePackReader(bodiesData); | |||
jT809Package.Bodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809BodiesImplType), | |||
ref bodiesReader, config); | |||
jT809Package.Bodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(instance,ref bodiesReader, config); | |||
break; | |||
} | |||
} | |||
} | |||
catch (Exception ex) | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{reader.ReadCurrentRemainContentLength().ToString()}", ex); | |||
catch (Exception ex) | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.BodiesParseError, $"offset>{reader.ReadCurrentRemainContentLength().ToString()}", ex); | |||
} | |||
} | |||
} | |||
jT809Package.CRCCode = reader.CalculateCheckXorCode; | |||
@@ -120,10 +114,7 @@ namespace JT809.Protocol | |||
// 3.2.写入数据对应数据体 | |||
if (value.Bodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
config.GetMessagePackFormatterByType(value.Bodies.GetType()), | |||
ref writer, value.Bodies, | |||
config); | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(value.Bodies,ref writer, value.Bodies,config); | |||
} | |||
// 3.3.记录当前结束位置 | |||
int endIndex = writer.GetCurrentPosition(); | |||
@@ -17,17 +17,16 @@ namespace JT809.Protocol | |||
public class JT809Serializer | |||
{ | |||
private readonly IJT809Config jT809Config; | |||
private static readonly JT809Package jT809Package = new JT809Package(); | |||
private static readonly JT809HeaderPackage jT809HeaderPackage = new JT809HeaderPackage(); | |||
public JT809Serializer(IJT809Config jT809Config) | |||
{ | |||
this.jT809Config = jT809Config; | |||
} | |||
public JT809Serializer():this(new DefaultGlobalConfig()) | |||
{ | |||
} | |||
public string SerializerId => jT809Config.ConfigId; | |||
public byte[] Serialize(JT809Package jT809Package, int minBufferSize = 4096) | |||
{ | |||
@@ -35,8 +34,7 @@ namespace JT809.Protocol | |||
try | |||
{ | |||
JT809MessagePackWriter jT809MessagePackWriter = new JT809MessagePackWriter(buffer); | |||
//todo:JT809PackageFormatter | |||
//JT809PackageFormatter.Instance.Serialize(ref jT809MessagePackWriter,jT809Package, jT809Config); | |||
jT809Package.Serialize(ref jT809MessagePackWriter,jT809Package, jT809Config); | |||
return jT809MessagePackWriter.FlushAndGetEncodingArray(); | |||
} | |||
finally | |||
@@ -44,7 +42,6 @@ namespace JT809.Protocol | |||
JT809ArrayPool.Return(buffer); | |||
} | |||
} | |||
public JT809Package Deserialize(ReadOnlySpan<byte> bytes, int minBufferSize = 4096) | |||
{ | |||
byte[] buffer = JT809ArrayPool.Rent(minBufferSize); | |||
@@ -52,29 +49,24 @@ namespace JT809.Protocol | |||
{ | |||
JT809MessagePackReader jT809MessagePackReader = new JT809MessagePackReader(bytes); | |||
jT809MessagePackReader.Decode(buffer); | |||
//todo:JT809PackageFormatter | |||
return default; | |||
//return JT809PackageFormatter.Instance.Deserialize(ref jT809MessagePackReader, jT809Config); | |||
return jT809Package.Deserialize(ref jT809MessagePackReader, jT809Config); | |||
} | |||
finally | |||
{ | |||
JT809ArrayPool.Return(buffer); | |||
} | |||
} | |||
private static bool CheckPackageType(Type type) | |||
{ | |||
return type == typeof(JT809Package) || type == typeof(JT809HeaderPackage); | |||
} | |||
public byte[] Serialize<T>(T obj,int minBufferSize = 4096) | |||
{ | |||
byte[] buffer = JT809ArrayPool.Rent(minBufferSize); | |||
try | |||
{ | |||
JT809MessagePackWriter jT809MessagePackWriter = new JT809MessagePackWriter(buffer); | |||
//todo:JT809MessagePackFormatterExtensions | |||
//JT809MessagePackFormatterExtensions.GetFormatter<T>().Serialize(ref jT809MessagePackWriter, obj,jT809Config); | |||
JT809MessagePackFormatterExtensions.GetMessagePackFormatter<T>(jT809Config).Serialize(ref jT809MessagePackWriter, obj,jT809Config); | |||
return jT809MessagePackWriter.FlushAndGetEncodingArray(); | |||
} | |||
finally | |||
@@ -82,7 +74,6 @@ namespace JT809.Protocol | |||
JT809ArrayPool.Return(buffer); | |||
} | |||
} | |||
public T Deserialize<T>(ReadOnlySpan<byte> bytes, int minBufferSize = 4096) | |||
{ | |||
byte[] buffer = JT809ArrayPool.Rent(minBufferSize); | |||
@@ -91,15 +82,13 @@ namespace JT809.Protocol | |||
JT809MessagePackReader jT809MessagePackReader = new JT809MessagePackReader(bytes); | |||
if (CheckPackageType(typeof(T))) | |||
jT809MessagePackReader.Decode(buffer); | |||
return default; | |||
//return JT809MessagePackFormatterExtensions.GetFormatter<T>().Deserialize(ref jT809MessagePackReader, jT809Config); | |||
return JT809MessagePackFormatterExtensions.GetMessagePackFormatter<T>(jT809Config).Deserialize(ref jT809MessagePackReader, jT809Config); | |||
} | |||
finally | |||
{ | |||
JT809ArrayPool.Return(buffer); | |||
} | |||
} | |||
public JT809HeaderPackage HeaderDeserialize(ReadOnlySpan<byte> bytes, int minBufferSize = 4096) | |||
{ | |||
byte[] buffer = JT809ArrayPool.Rent(minBufferSize); | |||
@@ -107,9 +96,7 @@ namespace JT809.Protocol | |||
{ | |||
JT809MessagePackReader jT808MessagePackReader = new JT809MessagePackReader(bytes); | |||
jT808MessagePackReader.Decode(buffer); | |||
//todo:JT809HeaderPackageFormatter | |||
return default; | |||
//return JT809HeaderPackageFormatter.Instance.Deserialize(ref jT808MessagePackReader, jT809Config); | |||
return jT809HeaderPackage.Deserialize(ref jT808MessagePackReader, jT809Config); | |||
} | |||
finally | |||
{ | |||
@@ -1,6 +1,9 @@ | |||
| |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -11,10 +14,66 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:UP_EXG_MSG</para> | |||
/// <para>描述:下级平台向上级平台发送车辆动态信息交换业务数据包</para> | |||
/// </summary> | |||
public class JT809_0x1200: JT809ExchangeMessageBodies | |||
public class JT809_0x1200: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1200> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.主链路车辆动态信息交换业务.ToUInt16Value(); | |||
public override string Description => "主链路车辆动态信息交换业务"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public JT809_0x1200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x1200 value = new JT809_0x1200(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -21,39 +21,51 @@ namespace JT809.Protocol.MessageBody | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public JT809_0x1300 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x1300 jT809_0X1300 = new JT809_0x1300(); | |||
jT809_0X1300.SubBusinessType = reader.ReadUInt16(); | |||
jT809_0X1300.DataLength = reader.ReadUInt32(); | |||
JT809_0x1300 value = new JT809_0x1300(); | |||
//value.VehicleNo = reader.ReadString(21); | |||
//value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 | |||
Type jT809SubBodiesImplType = config.SubBusinessTypeFactory.GetSubBodiesImplTypeBySubBusinessType(jT809_0X1300.SubBusinessType); | |||
if (jT809SubBodiesImplType != null) | |||
jT809_0X1300.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809SubBodiesImplType), | |||
ref reader, config); | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{jT809_0X1300.SubBusinessType.ToString()}"); | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return jT809_0X1300; | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1300 value, IJT809Config config) | |||
{ | |||
//writer.WriteStringPadRight(value.VehicleNo, 21); | |||
//writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
config.GetMessagePackFormatterByType(value.SubBodies.GetType()), | |||
ref writer, value.SubBodies, | |||
config); | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
@@ -1,5 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -11,10 +14,66 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:UP_WARN_MSG</para> | |||
/// <para>描述:下级平台向上级平台发送车辆报警信息业务</para> | |||
/// </summary> | |||
public class JT809_0x1400: JT809ExchangeMessageBodies | |||
public class JT809_0x1400: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1400> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.主链路报警信息交互消息.ToUInt16Value(); | |||
public override string Description => "主链路报警信息交互消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public JT809_0x1400 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x1400 value = new JT809_0x1400(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1400 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,5 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -10,10 +13,65 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:UP_CTRL_MSG</para> | |||
/// <para>描述:下级平台向上级平台发送车辆监管业务</para> | |||
/// </summary> | |||
public class JT809_0x1500: JT809ExchangeMessageBodies | |||
public class JT809_0x1500: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1500> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.主链路车辆监管消息.ToUInt16Value(); | |||
public override string Description => "主链路车辆监管消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public JT809_0x1500 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x1500 value = new JT809_0x1500(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1500 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,5 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -10,10 +13,66 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>消息方向:下级平台往上级平台</para> | |||
/// <para>描述:下级平台向上级平台发送车辆睁态信息交换业务</para> | |||
/// </summary> | |||
public class JT809_0x1600: JT809ExchangeMessageBodies | |||
public class JT809_0x1600: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x1600> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.主链路静态信息交换消息.ToUInt16Value(); | |||
public override string Description => "主链路静态信息交换消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.main; | |||
public JT809_0x1600 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x1600 value = new JT809_0x1600(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1600 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,5 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -10,10 +13,66 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:DOWN_EXG_MSG</para> | |||
/// <para>描述:上级平台作为客户端向下级平台服务端发送车辆动态信息交换业务</para> | |||
/// </summary> | |||
public class JT809_0x9200: JT809ExchangeMessageBodies | |||
public class JT809_0x9200: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9200> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.从链路车辆动态信息交换业务.ToUInt16Value(); | |||
public override string Description => "从链路车辆动态信息交换业务"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.subordinate; | |||
public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x9200 value = new JT809_0x9200(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -21,39 +21,51 @@ namespace JT809.Protocol.MessageBody | |||
public override JT809_LinkType LinkType => JT809_LinkType.subordinate; | |||
public JT809_0x9300 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x9300 jT809_0X9300 = new JT809_0x9300(); | |||
jT809_0X9300.SubBusinessType = reader.ReadUInt16(); | |||
jT809_0X9300.DataLength = reader.ReadUInt32(); | |||
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 | |||
JT809_0x9300 value = new JT809_0x9300(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
Type jT809SubBodiesImplType = config.SubBusinessTypeFactory.GetSubBodiesImplTypeBySubBusinessType(jT809_0X9300.SubBusinessType); | |||
if (jT809SubBodiesImplType != null) | |||
jT809_0X9300.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
config.GetMessagePackFormatterByType(jT809SubBodiesImplType), | |||
ref reader, config); | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{jT809_0X9300.SubBusinessType.ToString()}"); | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return jT809_0X9300; | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9300 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
//JT809.Protocol.Enums.JT809BusinessType 映射对应消息特性 | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
config.GetMessagePackFormatterByType(value.SubBodies.GetType()), | |||
ref writer, value.SubBodies, | |||
config); | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
@@ -1,6 +1,9 @@ | |||
| |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -11,10 +14,65 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:DOWN_WARN_MSG</para> | |||
/// <para>描述:上级平台向下级平台发送报瞥信息业务</para> | |||
/// </summary> | |||
public class JT809_0x9400: JT809ExchangeMessageBodies | |||
public class JT809_0x9400: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9400> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.从链路报警信息交互消息.ToUInt16Value(); | |||
public override string Description => "从链路报警信息交互消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.subordinate; | |||
public JT809_0x9400 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x9400 value = new JT809_0x9400(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9400 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,5 +1,8 @@ | |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -10,10 +13,65 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:DOWN_CTRL_MSG</para> | |||
/// <para>描述:上级平台向下级平台发送车辆监监管业务</para> | |||
/// </summary> | |||
public class JT809_0x9500: JT809ExchangeMessageBodies | |||
public class JT809_0x9500: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9500> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.从链路车辆监管消息.ToUInt16Value(); | |||
public override string Description => "从链路车辆监管消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.subordinate; | |||
public JT809_0x9500 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x9500 value = new JT809_0x9500(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9500 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -1,6 +1,9 @@ | |||
| |||
using JT809.Protocol.Enums; | |||
using JT809.Protocol.Exceptions; | |||
using JT809.Protocol.Extensions; | |||
using JT809.Protocol.Formatters; | |||
using JT809.Protocol.MessagePack; | |||
namespace JT809.Protocol.MessageBody | |||
{ | |||
@@ -11,10 +14,66 @@ namespace JT809.Protocol.MessageBody | |||
/// <para>业务数据类型标识:DOWN_BASE_MSG</para> | |||
/// <para>描述:上级平台向下级平台发送车辆静态信息交换业务</para> | |||
/// </summary> | |||
public class JT809_0x9600: JT809ExchangeMessageBodies | |||
public class JT809_0x9600: JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9600> | |||
{ | |||
public override ushort MsgId => JT809BusinessType.从链路静态信息交换消息.ToUInt16Value(); | |||
public override string Description => "从链路静态信息交换消息"; | |||
public override JT809_LinkType LinkType => JT809_LinkType.subordinate; | |||
public JT809_0x9600 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | |||
{ | |||
JT809_0x9600 value = new JT809_0x9600(); | |||
value.VehicleNo = reader.ReadString(21); | |||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||
value.SubBusinessType = reader.ReadUInt16(); | |||
value.DataLength = reader.ReadUInt32(); | |||
try | |||
{ | |||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||
{ | |||
if (instance is JT809SubBodies subBodies) | |||
{ | |||
if (!subBodies.SkipSerialization) | |||
{ | |||
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( | |||
instance, | |||
ref reader, config); | |||
} | |||
} | |||
} | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
return value; | |||
} | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9600 value, IJT809Config config) | |||
{ | |||
writer.WriteStringPadRight(value.VehicleNo, 21); | |||
writer.WriteByte((byte)value.VehicleColor); | |||
writer.WriteUInt16(value.SubBusinessType); | |||
try | |||
{ | |||
// 先写入内容,然后在根据内容反写内容长度 | |||
writer.Skip(4, out int subContentLengthPosition); | |||
if (value.SubBodies != null) | |||
{ | |||
if (!value.SubBodies.SkipSerialization) | |||
{ | |||
JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize( | |||
value.SubBodies, | |||
ref writer, value.SubBodies, | |||
config); | |||
} | |||
} | |||
writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition); | |||
} | |||
catch | |||
{ | |||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||
} | |||
} | |||
} | |||
} |
@@ -44,9 +44,8 @@ namespace JT809.Protocol.SubMessageBody | |||
try | |||
{ | |||
JT809MessagePackReader jT809_0x1200_0x1202Reader = new JT809MessagePackReader(reader.ReadArray(36)); | |||
//todo:JT809_0x1200_0x1202_Formatter | |||
//var jT809_0x1200_0x1202 = JT809_0x1200_0x1202_Formatter.Instance.Deserialize(ref jT809_0x1200_0x1202Reader, config); | |||
//jT809_0X1200_0X1203.GNSS.Add(jT809_0x1200_0x1202); | |||
var jT809_0x1200_0x1202 = config.GetMessagePackFormatter<JT809_0x1200_0x1202>().Deserialize(ref jT809_0x1200_0x1202Reader, config); | |||
jT809_0X1200_0X1203.GNSS.Add(jT809_0x1200_0x1202); | |||
} | |||
catch (Exception) | |||
{ | |||
@@ -64,8 +63,7 @@ namespace JT809.Protocol.SubMessageBody | |||
{ | |||
try | |||
{ | |||
//todo:JT809_0x1200_0x1202_Formatter | |||
//JT809_0x1200_0x1202_Formatter.Instance.Serialize(ref writer, item, config); | |||
item.Serialize(ref writer, item, config); | |||
} | |||
catch (Exception ex) | |||
{ | |||
@@ -38,9 +38,8 @@ namespace JT809.Protocol.SubMessageBody | |||
try | |||
{ | |||
JT809MessagePackReader jT809_0x9200_0x9202Reader = new JT809MessagePackReader(reader.ReadArray(36)); | |||
//todo:JT809_0x9200_0x9202 | |||
//JT809_0x9200_0x9202 jT809_0x1200_0x1202 = JT809_0x9200_0x9202_Formatter.Instance.Deserialize(ref jT809_0x9200_0x9202Reader, config); | |||
//jT809_0X1200_0x9203.GNSS.Add(jT809_0x1200_0x1202); | |||
JT809_0x9200_0x9202 jT809_0x1200_0x1202 = config.GetMessagePackFormatter<JT809_0x9200_0x9202>().Deserialize(ref jT809_0x9200_0x9202Reader, config); | |||
jT809_0X1200_0x9203.GNSS.Add(jT809_0x1200_0x1202); | |||
} | |||
catch (Exception) | |||
{ | |||
@@ -57,8 +56,7 @@ namespace JT809.Protocol.SubMessageBody | |||
{ | |||
try | |||
{ | |||
//todo:JT809_0x9200_0x9202 | |||
//JT809_0x9200_0x9202_Formatter.Instance.Serialize(ref writer, item, config); | |||
item.Serialize(ref writer, item, config); | |||
} | |||
catch (Exception ex) | |||
{ | |||
@@ -70,7 +70,7 @@ namespace JT809.Protocol.SubMessageBody | |||
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9400_0x9401 value, IJT809Config config) | |||
{ | |||
writer.WriteByte((byte)value.WarnSrc); | |||
writer.WriteUInt16((ushort)value.WarnType); | |||
writer.WriteUInt16(value.WarnType); | |||
writer.WriteUTCDateTime(value.WarnTime); | |||
writer.WriteHex(value.SupervisionID, 4); | |||
writer.WriteUTCDateTime(value.SupervisionEndTime); | |||