@@ -27,9 +27,9 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
[Fact] | [Fact] | ||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
var PlateFormIds = Enumerable.Range(0, 11).Select(s => (byte)s).ToArray(); | |||||
var AuthorizeCode1s = Enumerable.Range(0, 64).Select(s => (byte)s).ToArray(); | |||||
var AuthorizeCode2s = Enumerable.Range(0, 64).Select(s => (byte)s).ToArray(); | |||||
var PlateFormIds = "01234567890"; | |||||
var AuthorizeCode1s = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var AuthorizeCode2s = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
JT809_JT1078_0x1700 jT809_JT1078_0x1700 = new JT809_JT1078_0x1700() | JT809_JT1078_0x1700 jT809_JT1078_0x1700 = new JT809_JT1078_0x1700() | ||||
{ | { | ||||
@@ -43,16 +43,16 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x1700).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x1700).ToHexString(); | ||||
Assert.Equal("D4C1423132333435000000000000000000000000000217010000008B000102030405060708090A000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F", hex); | |||||
Assert.Equal("D4C1423132333435000000000000000000000000000217010000008B30313233343536373839303031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323330313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var PlateFormIds = Enumerable.Range(0, 11).Select(s => (byte)s).ToArray(); | |||||
var AuthorizeCode1s = Enumerable.Range(0, 64).Select(s => (byte)s).ToArray(); | |||||
var AuthorizeCode2s = Enumerable.Range(0, 64).Select(s => (byte)s).ToArray(); | |||||
var jT809_JT1078_0x1700 = JT809Serializer.Deserialize<JT809_JT1078_0x1700>("D4C1423132333435000000000000000000000000000217010000008B000102030405060708090A000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F".ToHexBytes()); | |||||
var PlateFormIds = "01234567890"; | |||||
var AuthorizeCode1s = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var AuthorizeCode2s = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var jT809_JT1078_0x1700 = JT809Serializer.Deserialize<JT809_JT1078_0x1700>("D4C1423132333435000000000000000000000000000217010000008B30313233343536373839303031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323330313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x1700.VehicleNo); | Assert.Equal("粤B12345", jT809_JT1078_0x1700.VehicleNo); | ||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1700.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1700.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.时效口令上报消息, jT809_JT1078_0x1700.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.时效口令上报消息, jT809_JT1078_0x1700.SubBusinessType); | ||||
@@ -35,7 +35,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
SubBodies= new JT809_JT1078_0x1800_0x1801() { | SubBodies= new JT809_JT1078_0x1800_0x1801() { | ||||
ServerIp="127.0.0.1", | ServerIp="127.0.0.1", | ||||
ServerPort=8080, | ServerPort=8080, | ||||
Result=1 | |||||
Result= JT809_JT1078_0x1800_0x1801_Result.失败 | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x1800).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x1800).ToHexString(); | ||||
@@ -52,7 +52,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
var jT809_JT1078_0x1800_0x1801 = jT809_JT1078_0x1800.SubBodies as JT809_JT1078_0x1800_0x1801; | var jT809_JT1078_0x1800_0x1801 = jT809_JT1078_0x1800.SubBodies as JT809_JT1078_0x1800_0x1801; | ||||
Assert.Equal("127.0.0.1", jT809_JT1078_0x1800_0x1801.ServerIp); | Assert.Equal("127.0.0.1", jT809_JT1078_0x1800_0x1801.ServerIp); | ||||
Assert.Equal(8080, jT809_JT1078_0x1800_0x1801.ServerPort); | Assert.Equal(8080, jT809_JT1078_0x1800_0x1801.ServerPort); | ||||
Assert.Equal(1, jT809_JT1078_0x1800_0x1801.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1800_0x1801.Result); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -64,7 +64,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息, | ||||
SubBodies = new JT809_JT1078_0x1800_0x1802() { | SubBodies = new JT809_JT1078_0x1800_0x1802() { | ||||
Result=1 | |||||
Result= JT809_JT1078_0x1800_0x1802_Result.失败 | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x1800).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x1800).ToHexString(); | ||||
@@ -79,7 +79,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1800.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1800.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息, jT809_JT1078_0x1800.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息, jT809_JT1078_0x1800.SubBusinessType); | ||||
var jT809_JT1078_0x1800_0x1802 = jT809_JT1078_0x1800.SubBodies as JT809_JT1078_0x1800_0x1802; | var jT809_JT1078_0x1800_0x1802 = jT809_JT1078_0x1800.SubBodies as JT809_JT1078_0x1800_0x1802; | ||||
Assert.Equal(1, jT809_JT1078_0x1800_0x1802.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1800_0x1802.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -111,7 +111,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录应答消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录应答消息, | ||||
SubBodies = new JT809_JT1078_0x1900_0x1902() { | SubBodies = new JT809_JT1078_0x1900_0x1902() { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x1900_0x1902_Result.失败, | |||||
ItemNum=2, | ItemNum=2, | ||||
ItemList = new List<JT809_JT1078_0x1900_Record> { | ItemList = new List<JT809_JT1078_0x1900_Record> { | ||||
new JT809_JT1078_0x1900_Record{ | new JT809_JT1078_0x1900_Record{ | ||||
@@ -150,7 +150,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录应答消息, jT809_JT1078_0x1900.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录应答消息, jT809_JT1078_0x1900.SubBusinessType); | ||||
var jT809_JT1078_0x1900_0x1902 = jT809_JT1078_0x1900.SubBodies as JT809_JT1078_0x1900_0x1902; | var jT809_JT1078_0x1900_0x1902 = jT809_JT1078_0x1900.SubBodies as JT809_JT1078_0x1900_0x1902; | ||||
Assert.Equal(2u, jT809_JT1078_0x1900_0x1902.ItemNum); | Assert.Equal(2u, jT809_JT1078_0x1900_0x1902.ItemNum); | ||||
Assert.Equal(1, jT809_JT1078_0x1900_0x1902.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1900_0x1902.Result); | |||||
Assert.Equal(1u, jT809_JT1078_0x1900_0x1902.ItemList[0].AlarmType); | Assert.Equal(1u, jT809_JT1078_0x1900_0x1902.ItemList[0].AlarmType); | ||||
Assert.Equal(2, jT809_JT1078_0x1900_0x1902.ItemList[0].AVItemType); | Assert.Equal(2, jT809_JT1078_0x1900_0x1902.ItemList[0].AVItemType); | ||||
@@ -45,7 +45,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.远程录像回放请求应答消息, | SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.远程录像回放请求应答消息, | ||||
SubBodies= new JT809_JT1078_0x1A00_0x1A01() | SubBodies= new JT809_JT1078_0x1A00_0x1A01() | ||||
{ | { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x1A00_0x1A01_Result.失败, | |||||
ServerIp="127.0.0.1", | ServerIp="127.0.0.1", | ||||
ServerPort=8080 | ServerPort=8080 | ||||
} | } | ||||
@@ -62,7 +62,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1A00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1A00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放请求应答消息, jT809_JT1078_0x1A00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放请求应答消息, jT809_JT1078_0x1A00.SubBusinessType); | ||||
var jT809_JT1078_0x1A00_0x1A01 = jT809_JT1078_0x1A00.SubBodies as JT809_JT1078_0x1A00_0x1A01; | var jT809_JT1078_0x1A00_0x1A01 = jT809_JT1078_0x1A00.SubBodies as JT809_JT1078_0x1A00_0x1A01; | ||||
Assert.Equal(1, jT809_JT1078_0x1A00_0x1A01.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1A00_0x1A01.Result); | |||||
Assert.Equal("127.0.0.1", jT809_JT1078_0x1A00_0x1A01.ServerIp); | Assert.Equal("127.0.0.1", jT809_JT1078_0x1A00_0x1A01.ServerIp); | ||||
Assert.Equal(8080, jT809_JT1078_0x1A00_0x1A01.ServerPort); | Assert.Equal(8080, jT809_JT1078_0x1A00_0x1A01.ServerPort); | ||||
} | } | ||||
@@ -76,7 +76,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像回放控制应答消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像回放控制应答消息, | ||||
SubBodies = new JT809_JT1078_0x1A00_0x1A02() { | SubBodies = new JT809_JT1078_0x1A00_0x1A02() { | ||||
Result=1 | |||||
Result= JT809_JT1078_0x1A00_0x1A02_Result.失败 | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x1A00).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x1A00).ToHexString(); | ||||
@@ -91,7 +91,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1A00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1A00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放控制应答消息, jT809_JT1078_0x1A00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放控制应答消息, jT809_JT1078_0x1A00.SubBusinessType); | ||||
var jT809_JT1078_0x1A00_0x1A02 = jT809_JT1078_0x1A00.SubBodies as JT809_JT1078_0x1A00_0x1A02; | var jT809_JT1078_0x1A00_0x1A02 = jT809_JT1078_0x1A00.SubBodies as JT809_JT1078_0x1A00_0x1A02; | ||||
Assert.Equal(1, jT809_JT1078_0x1A00_0x1A02.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1A00_0x1A02.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -45,7 +45,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.远程录像下载请求应答消息, | SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.远程录像下载请求应答消息, | ||||
SubBodies= new JT809_JT1078_0x1B00_0x1B01() | SubBodies= new JT809_JT1078_0x1B00_0x1B01() | ||||
{ | { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x1B00_0x1B01_Result.失败, | |||||
SessionId=2 | SessionId=2 | ||||
} | } | ||||
}; | }; | ||||
@@ -61,8 +61,8 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载请求应答消息, jT809_JT1078_0x1B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载请求应答消息, jT809_JT1078_0x1B00.SubBusinessType); | ||||
var jT809_JT1078_0x1B00_0x1B01 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B01; | var jT809_JT1078_0x1B00_0x1B01 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B01; | ||||
Assert.Equal(1, jT809_JT1078_0x1B00_0x1B01.Result); | |||||
Assert.Equal(2, jT809_JT1078_0x1B00_0x1B01.SessionId); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1B00_0x1B01.Result); | |||||
Assert.Equal(2, (byte)jT809_JT1078_0x1B00_0x1B01.SessionId); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -74,7 +74,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载通知消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载通知消息, | ||||
SubBodies = new JT809_JT1078_0x1B00_0x1B02() { | SubBodies = new JT809_JT1078_0x1B00_0x1B02() { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x1B00_0x1B02_Result.失败, | |||||
UserName="tk", | UserName="tk", | ||||
SessionId=2, | SessionId=2, | ||||
ServerIp="127.0.0.1", | ServerIp="127.0.0.1", | ||||
@@ -95,7 +95,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载通知消息, jT809_JT1078_0x1B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载通知消息, jT809_JT1078_0x1B00.SubBusinessType); | ||||
var jT809_JT1078_0x1B00_0x1B02 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B02; | var jT809_JT1078_0x1B00_0x1B02 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B02; | ||||
Assert.Equal(1, jT809_JT1078_0x1B00_0x1B02.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1B00_0x1B02.Result); | |||||
Assert.Equal("tk", jT809_JT1078_0x1B00_0x1B02.UserName); | Assert.Equal("tk", jT809_JT1078_0x1B00_0x1B02.UserName); | ||||
Assert.Equal(2, jT809_JT1078_0x1B00_0x1B02.SessionId); | Assert.Equal(2, jT809_JT1078_0x1B00_0x1B02.SessionId); | ||||
Assert.Equal("127.0.0.1", jT809_JT1078_0x1B00_0x1B02.ServerIp); | Assert.Equal("127.0.0.1", jT809_JT1078_0x1B00_0x1B02.ServerIp); | ||||
@@ -114,7 +114,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载控制应答消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载控制应答消息, | ||||
SubBodies = new JT809_JT1078_0x1B00_0x1B03() | SubBodies = new JT809_JT1078_0x1B00_0x1B03() | ||||
{ | { | ||||
Result = 1 | |||||
Result = JT809_JT1078_0x1B00_0x1B03_Result.失败 | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x1B00).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x1B00).ToHexString(); | ||||
@@ -129,7 +129,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载控制应答消息, jT809_JT1078_0x1B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载控制应答消息, jT809_JT1078_0x1B00.SubBusinessType); | ||||
var jT809_JT1078_0x1B00_0x1B03 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B03; | var jT809_JT1078_0x1B00_0x1B03 = jT809_JT1078_0x1B00.SubBodies as JT809_JT1078_0x1B00_0x1B03; | ||||
Assert.Equal(1, jT809_JT1078_0x1B00_0x1B03.Result); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x1B00_0x1B03.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -28,7 +28,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
JT809_JT1078_0x9800 jT809_JT1078_0x9800 = new JT809_JT1078_0x9800() | JT809_JT1078_0x9800 jT809_JT1078_0x9800 = new JT809_JT1078_0x9800() | ||||
{ | { | ||||
VehicleNo="粤B12345", | VehicleNo="粤B12345", | ||||
@@ -42,19 +42,19 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x9800).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x9800).ToHexString(); | ||||
Assert.Equal("D4C142313233343500000000000000000000000000029801000000660201000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
Assert.Equal("D4C14231323334350000000000000000000000000002980100000066020130313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var jT809_JT1078_0x1900 = JT809Serializer.Deserialize<JT809_JT1078_0x1900>("D4C142313233343500000000000000000000000000029801000000660201000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x1900.VehicleNo); | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x1900.VehicleColor); | |||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.实时音视频请求消息, jT809_JT1078_0x1900.SubBusinessType); | |||||
var jT809_JT1078_0x9800_0x9801 = jT809_JT1078_0x1900.SubBodies as JT809_JT1078_0x9800_0x9801; | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var jT809_JT1078_0x9800 = JT809Serializer.Deserialize<JT809_JT1078_0x9800>("D4C14231323334350000000000000000000000000002980100000066020130313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x9800.VehicleNo); | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9800.VehicleColor); | |||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.实时音视频请求消息, jT809_JT1078_0x9800.SubBusinessType); | |||||
var jT809_JT1078_0x9800_0x9801 = jT809_JT1078_0x9800.SubBodies as JT809_JT1078_0x9800_0x9801; | |||||
Assert.Equal(1, jT809_JT1078_0x9800_0x9801.AVitemType); | Assert.Equal(1, jT809_JT1078_0x9800_0x9801.AVitemType); | ||||
Assert.Equal(2, jT809_JT1078_0x9800_0x9801.ChannelId); | Assert.Equal(2, jT809_JT1078_0x9800_0x9801.ChannelId); | ||||
Assert.Equal(GnssDatas, jT809_JT1078_0x9800_0x9801.GnssData); | Assert.Equal(GnssDatas, jT809_JT1078_0x9800_0x9801.GnssData); | ||||
@@ -44,7 +44,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor= Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor= Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.主动上传音视频资源目录信息应答消息, | SubBusinessType= (ushort)JT809_JT1078_SubBusinessType.主动上传音视频资源目录信息应答消息, | ||||
SubBodies= new JT809_JT1078_0x9900_0x9901() { | SubBodies= new JT809_JT1078_0x9900_0x9901() { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x9900_0x9901_Result.失败, | |||||
ItemNumber=2 | ItemNumber=2 | ||||
} | } | ||||
}; | }; | ||||
@@ -60,15 +60,15 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9900.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9900.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.主动上传音视频资源目录信息应答消息, jT809_JT1078_0x9900.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.主动上传音视频资源目录信息应答消息, jT809_JT1078_0x9900.SubBusinessType); | ||||
var jT809_JT1078_0x9900_0x9901 = jT809_JT1078_0x9900.SubBodies as JT809_JT1078_0x9900_0x9901; | var jT809_JT1078_0x9900_0x9901 = jT809_JT1078_0x9900.SubBodies as JT809_JT1078_0x9900_0x9901; | ||||
Assert.Equal(1, jT809_JT1078_0x9900_0x9901.Result); | |||||
Assert.Equal(2, jT809_JT1078_0x9900_0x9901.ItemNumber); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x9900_0x9901.Result); | |||||
Assert.Equal(2, (byte)jT809_JT1078_0x9900_0x9901.ItemNumber); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test3() | public void Test3() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
JT809_JT1078_0x9900 jT809_JT1078_0x9900 = new JT809_JT1078_0x9900() | JT809_JT1078_0x9900 jT809_JT1078_0x9900 = new JT809_JT1078_0x9900() | ||||
{ | { | ||||
VehicleNo = "粤B12345", | VehicleNo = "粤B12345", | ||||
@@ -87,15 +87,15 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x9900).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x9900).ToHexString(); | ||||
Assert.Equal("D4C1423132333435000000000000000000000000000299020000008001000000005969798200000000596ACB020000000000000002030504000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
Assert.Equal("D4C1423132333435000000000000000000000000000299020000008001000000005969798200000000596ACB02000000000000000203050430313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test4() | public void Test4() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var jT809_JT1078_0x9900 = JT809Serializer.Deserialize<JT809_JT1078_0x9900>("D4C1423132333435000000000000000000000000000299020000008001000000005969798200000000596ACB020000000000000002030504000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var jT809_JT1078_0x9900 = JT809Serializer.Deserialize<JT809_JT1078_0x9900>("D4C1423132333435000000000000000000000000000299020000008001000000005969798200000000596ACB02000000000000000203050430313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x9900.VehicleNo); | Assert.Equal("粤B12345", jT809_JT1078_0x9900.VehicleNo); | ||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9900.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9900.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录请求消息, jT809_JT1078_0x9900.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.查询音视频资源目录请求消息, jT809_JT1078_0x9900.SubBusinessType); | ||||
@@ -39,7 +39,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
JT809_JT1078_0x9A00 jT809_JT1078_0x9A00 = new JT809_JT1078_0x9A00() | JT809_JT1078_0x9A00 jT809_JT1078_0x9A00 = new JT809_JT1078_0x9A00() | ||||
{ | { | ||||
VehicleNo = "粤B12345", | VehicleNo = "粤B12345", | ||||
@@ -57,15 +57,15 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x9A00).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x9A00).ToHexString(); | ||||
Assert.Equal("D4C142313233343500000000000000000000000000029A01000000780201040300000000596ACB0200000000596C1C82000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
Assert.Equal("D4C142313233343500000000000000000000000000029A01000000780201040300000000596ACB0200000000596C1C8230313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var jT809_JT1078_0x9A00 = JT809Serializer.Deserialize<JT809_JT1078_0x9A00>("D4C142313233343500000000000000000000000000029A01000000780201040300000000596ACB0200000000596C1C82000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var jT809_JT1078_0x9A00 = JT809Serializer.Deserialize<JT809_JT1078_0x9A00>("D4C142313233343500000000000000000000000000029A01000000780201040300000000596ACB0200000000596C1C8230313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x9A00.VehicleNo); | Assert.Equal("粤B12345", jT809_JT1078_0x9A00.VehicleNo); | ||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9A00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9A00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放请求消息, jT809_JT1078_0x9A00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放请求消息, jT809_JT1078_0x9A00.SubBusinessType); | ||||
@@ -91,9 +91,9 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像回放控制消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像回放控制消息, | ||||
SubBodies = new JT809_JT1078_0x9A00_0x9A02() { | SubBodies = new JT809_JT1078_0x9A00_0x9A02() { | ||||
ControlType=1, | |||||
ControlType= ControlType.暂停回放, | |||||
DateTime= Convert.ToDateTime("2017-07-17 10:10:10"), | DateTime= Convert.ToDateTime("2017-07-17 10:10:10"), | ||||
FastTime=1 | |||||
FastTime= FastTime._1倍 | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x9A00).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x9A00).ToHexString(); | ||||
@@ -108,9 +108,9 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9A00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9A00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放控制消息, jT809_JT1078_0x9A00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像回放控制消息, jT809_JT1078_0x9A00.SubBusinessType); | ||||
var jT809_JT1078_0x9A00_0x9A02 = jT809_JT1078_0x9A00.SubBodies as JT809_JT1078_0x9A00_0x9A02; | var jT809_JT1078_0x9A00_0x9A02 = jT809_JT1078_0x9A00.SubBodies as JT809_JT1078_0x9A00_0x9A02; | ||||
Assert.Equal(1, jT809_JT1078_0x9A00_0x9A02.ControlType); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x9A00_0x9A02.ControlType); | |||||
Assert.Equal(Convert.ToDateTime("2017-07-17 10:10:10"), jT809_JT1078_0x9A00_0x9A02.DateTime); | Assert.Equal(Convert.ToDateTime("2017-07-17 10:10:10"), jT809_JT1078_0x9A00_0x9A02.DateTime); | ||||
Assert.Equal(1, jT809_JT1078_0x9A00_0x9A02.FastTime); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x9A00_0x9A02.FastTime); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -39,7 +39,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
JT809_JT1078_0x9B00 jT809_JT1078_0x9B00 = new JT809_JT1078_0x9B00() | JT809_JT1078_0x9B00 jT809_JT1078_0x9B00 = new JT809_JT1078_0x9B00() | ||||
{ | { | ||||
VehicleNo = "粤B12345", | VehicleNo = "粤B12345", | ||||
@@ -59,15 +59,15 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
} | } | ||||
}; | }; | ||||
var hex = JT809Serializer.Serialize(jT809_JT1078_0x9B00).ToHexString(); | var hex = JT809Serializer.Serialize(jT809_JT1078_0x9B00).ToHexString(); | ||||
Assert.Equal("D4C142313233343500000000000000000000000000029B01000000840200000000596ACB0200000000596C1C82000000000000000501040300000006000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
Assert.Equal("D4C142313233343500000000000000000000000000029B01000000840200000000596ACB0200000000596C1C8200000000000000050104030000000630313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | var GnssDatas = Enumerable.Range(0, 36).Select(m => (byte)m).ToArray(); | ||||
var AuthorizeCodes = Enumerable.Range(0, 64).Select(m => (byte)m).ToArray(); | |||||
var jT809_JT1078_0x9B00 = JT809Serializer.Deserialize<JT809_JT1078_0x9B00>("D4C142313233343500000000000000000000000000029B01000000840200000000596ACB0200000000596C1C82000000000000000501040300000006000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
var AuthorizeCodes = "0123456789012345678901234567890123456789012345678901234567890123"; | |||||
var jT809_JT1078_0x9B00 = JT809Serializer.Deserialize<JT809_JT1078_0x9B00>("D4C142313233343500000000000000000000000000029B01000000840200000000596ACB0200000000596C1C8200000000000000050104030000000630313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes()); | |||||
Assert.Equal("粤B12345", jT809_JT1078_0x9B00.VehicleNo); | Assert.Equal("粤B12345", jT809_JT1078_0x9B00.VehicleNo); | ||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载请求消息, jT809_JT1078_0x9B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载请求消息, jT809_JT1078_0x9B00.SubBusinessType); | ||||
@@ -93,7 +93,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | VehicleColor = Protocol.Enums.JT809VehicleColorType.黄色, | ||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载完成通知应答消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载完成通知应答消息, | ||||
SubBodies = new JT809_JT1078_0x9B00_0x9B02() { | SubBodies = new JT809_JT1078_0x9B00_0x9B02() { | ||||
Result=1, | |||||
Result= JT809_JT1078_0x9B00_0x9B02_Result.失败, | |||||
SessionId=2 | SessionId=2 | ||||
} | } | ||||
}; | }; | ||||
@@ -109,8 +109,8 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载完成通知应答消息, jT809_JT1078_0x9B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载完成通知应答消息, jT809_JT1078_0x9B00.SubBusinessType); | ||||
var jT809_JT1078_0x9B00_0x9B02 = jT809_JT1078_0x9B00.SubBodies as JT809_JT1078_0x9B00_0x9B02; | var jT809_JT1078_0x9B00_0x9B02 = jT809_JT1078_0x9B00.SubBodies as JT809_JT1078_0x9B00_0x9B02; | ||||
Assert.Equal(1, jT809_JT1078_0x9B00_0x9B02.Result); | |||||
Assert.Equal(2, jT809_JT1078_0x9B00_0x9B02.SessionId); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x9B00_0x9B02.Result); | |||||
Assert.Equal(2, (byte)jT809_JT1078_0x9B00_0x9B02.SessionId); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test5() | public void Test5() | ||||
@@ -122,7 +122,7 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载控制消息, | SubBusinessType = (ushort)JT809_JT1078_SubBusinessType.远程录像下载控制消息, | ||||
SubBodies = new JT809_JT1078_0x9B00_0x9B03() | SubBodies = new JT809_JT1078_0x9B00_0x9B03() | ||||
{ | { | ||||
Type=1, | |||||
Type= JT809_JT1078_0x9B00_0x9B03_Type.继续, | |||||
SessionId = 2 | SessionId = 2 | ||||
} | } | ||||
}; | }; | ||||
@@ -138,8 +138,8 @@ namespace JT809.Protocol.Extensions.JT1078.Test | |||||
Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | Assert.Equal(Protocol.Enums.JT809VehicleColorType.黄色, jT809_JT1078_0x9B00.VehicleColor); | ||||
Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载控制消息, jT809_JT1078_0x9B00.SubBusinessType); | Assert.Equal((ushort)JT809_JT1078_SubBusinessType.远程录像下载控制消息, jT809_JT1078_0x9B00.SubBusinessType); | ||||
var jT809_JT1078_0x9B00_0x9B03 = jT809_JT1078_0x9B00.SubBodies as JT809_JT1078_0x9B00_0x9B03; | var jT809_JT1078_0x9B00_0x9B03 = jT809_JT1078_0x9B00.SubBodies as JT809_JT1078_0x9B00_0x9B03; | ||||
Assert.Equal(1, jT809_JT1078_0x9B00_0x9B03.Type); | |||||
Assert.Equal(2, jT809_JT1078_0x9B00_0x9B03.SessionId); | |||||
Assert.Equal(1, (byte)jT809_JT1078_0x9B00_0x9B03.Type); | |||||
Assert.Equal(2, (byte)jT809_JT1078_0x9B00_0x9B03.SessionId); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -0,0 +1,101 @@ | |||||
using JT809.Protocol.Extensions.JT1078.MessageBody; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using Newtonsoft.Json; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
namespace JT809.Protocol.Extensions.JT1078.Test | |||||
{ | |||||
public class JT809_JT1078_AnalyzeTest | |||||
{ | |||||
JT809Serializer JT809Serializer; | |||||
public JT809_JT1078_AnalyzeTest() | |||||
{ | |||||
IServiceCollection serviceDescriptors1 = new ServiceCollection(); | |||||
serviceDescriptors1 | |||||
.AddJT809Configure() | |||||
.AddJT1078Configure(); | |||||
var ServiceProvider1 = serviceDescriptors1.BuildServiceProvider(); | |||||
var defaultConfig = ServiceProvider1.GetRequiredService<IJT809Config>(); | |||||
JT809Serializer = defaultConfig.GetSerializer(); | |||||
Newtonsoft.Json.JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() => | |||||
{ | |||||
//日期类型默认格式化处理 | |||||
return new Newtonsoft.Json.JsonSerializerSettings | |||||
{ | |||||
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat, | |||||
DateFormatString = "yyyy-MM-dd HH:mm:ss" | |||||
}; | |||||
}); | |||||
} | |||||
[Fact] | |||||
public void Analyze() | |||||
{ | |||||
var hex = "D4C1423132333435000000000000000000000000000217010000008B30313233343536373839303031323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323330313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233".ToHexBytes(); | |||||
var json = JT809Serializer.Analyze<JT809_JT1078_0x1700>(hex); | |||||
hex = "D4C14231323334350000000000000000000000000002170200000000".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1700>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021801000000230100000000000000000000000000000000000000000000003132372E302E302E311F90".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1800>(hex); | |||||
hex = "D4C1423132333435000000000000000000000000000218020000000101".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1800>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021901000000440000000203000000005D2BE082000000005D2D32020000000000000001020605000000041F000000005D045382000000005D05A502000000000000000B153D3300000029".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1900>(hex); | |||||
hex = "D4C14231323334350000000000000000000000000002190200000045010000000203000000005D2BE082000000005D2D32020000000000000001020605000000041F000000005D045382000000005D05A502000000000000000B153D3300000029".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1900>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021A010000002300000000000000000000000000000000000000000000003132372E302E302E311F9001".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1A00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021A020000000101".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1A00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021B0100000003010002".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1B00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021B020000013401000200000000000000000000000000000000000000000000003132372E302E302E311F900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746B0000000000000000000000000000746B313233343536000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443A2F2F3132332F343536".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1B00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000021B030000000101".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x1B00>(hex); | |||||
hex = "D4C14231323334350000000000000000000000000002970200000000".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9700>(hex); | |||||
hex = "D4C14231323334350000000000000000000000000002980100000066020130313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9800>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029802000000020102".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9800>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029901000000020102".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9900>(hex); | |||||
hex = "D4C1423132333435000000000000000000000000000299020000008001000000005969798200000000596ACB02000000000000000203050430313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9900>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029A01000000780201040300000000596ACB0200000000596C1C8230313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9A00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029A020000000A010100000000596C1C82".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9A00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029B01000000840200000000596ACB0200000000596C1C8200000000000000050104030000000630313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9B00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029B0200000003010002".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9B00>(hex); | |||||
hex = "D4C142313233343500000000000000000000000000029B0300000003000201".ToHexBytes(); | |||||
json = JT809Serializer.Analyze<JT809_JT1078_0x9B00>(hex); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,20 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 控制类型 | |||||
/// </summary> | |||||
public enum ControlType:byte | |||||
{ | |||||
正常回放=0x00, | |||||
暂停回放 = 0x01, | |||||
结束回放 = 0x02, | |||||
快进回放 = 0x03, | |||||
关键帧快退回放 = 0x04, | |||||
拖动回放 = 0x05, | |||||
关键帧播放 = 0x06, | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum FastTime : byte | |||||
{ | |||||
无效 = 0x00, | |||||
_1倍 = 0x01, | |||||
_2倍 = 0x02, | |||||
_4倍 = 0x03, | |||||
_8倍 = 0x04, | |||||
_16倍 = 0x05, | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1800_0x1801_Result:byte | |||||
{ | |||||
成功=0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
时效口令错误 = 0x04, | |||||
不满足跨域条件 = 0x05, | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1800_0x1802_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1900_0x1902_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
时效口令错误 = 0x04, | |||||
不满足跨域条件 = 0x05, | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1A00_0x1A01_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
时效口令错误 = 0x04, | |||||
不满足跨域条件 = 0x05, | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1A00_0x1A02_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1B00_0x1B01_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
时效口令错误 = 0x04, | |||||
不满足跨域条件 = 0x05, | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1B00_0x1B02_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x1B00_0x1B03_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x9900_0x9901_Result:byte | |||||
{ | |||||
成功 = 0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x9B00_0x9B02_Result:byte | |||||
{ | |||||
成功=0x00, | |||||
失败 = 0x01, | |||||
不支持 = 0x02, | |||||
会话结束 = 0x03, | |||||
} | |||||
} |
@@ -0,0 +1,13 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Extensions.JT1078.Enums | |||||
{ | |||||
public enum JT809_JT1078_0x9B00_0x9B03_Type:byte | |||||
{ | |||||
暂停=0x00, | |||||
继续 = 0x01, | |||||
取消 = 0x02, | |||||
} | |||||
} |
@@ -1,4 +1,5 @@ | |||||
using JT809.Protocol.Extensions.JT1078.MessageBody; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Extensions.JT1078.MessageBody; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
@@ -13,14 +14,14 @@ namespace JT809.Protocol.Extensions.JT1078.Formatters | |||||
{ | { | ||||
JT809_JT1078_0x9B00_0x9B03 jT808_JT1078_0x9B00_0x9B03 = new JT809_JT1078_0x9B00_0x9B03(); | JT809_JT1078_0x9B00_0x9B03 jT808_JT1078_0x9B00_0x9B03 = new JT809_JT1078_0x9B00_0x9B03(); | ||||
jT808_JT1078_0x9B00_0x9B03.SessionId = reader.ReadUInt16(); | jT808_JT1078_0x9B00_0x9B03.SessionId = reader.ReadUInt16(); | ||||
jT808_JT1078_0x9B00_0x9B03.Type = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B03.Type = (JT809_JT1078_0x9B00_0x9B03_Type)reader.ReadByte(); | |||||
return jT808_JT1078_0x9B00_0x9B03; | return jT808_JT1078_0x9B00_0x9B03; | ||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B03 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B03 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteUInt16(value.SessionId); | writer.WriteUInt16(value.SessionId); | ||||
writer.WriteByte(value.Type); | |||||
writer.WriteByte((byte)value.Type); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -4,6 +4,11 @@ | |||||
<name>JT809.Protocol.Extensions.JT1078</name> | <name>JT809.Protocol.Extensions.JT1078</name> | ||||
</assembly> | </assembly> | ||||
<members> | <members> | ||||
<member name="T:JT809.Protocol.Extensions.JT1078.Enums.ControlType"> | |||||
<summary> | |||||
控制类型 | |||||
</summary> | |||||
</member> | |||||
<member name="F:JT809.Protocol.Extensions.JT1078.Enums.JT809_JT1078_BusinessType.主链路时效口令业务类"> | <member name="F:JT809.Protocol.Extensions.JT1078.Enums.JT809_JT1078_BusinessType.主链路时效口令业务类"> | ||||
<summary> | <summary> | ||||
主链路时效口令业务类 | 主链路时效口令业务类 | ||||
@@ -2,17 +2,19 @@ | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 主链路时效口令交互消息 | /// 主链路时效口令交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1700 : JT809ExchangeMessageBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1700> | |||||
public class JT809_JT1078_0x1700 : JT809ExchangeMessageBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1700>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; }=JT809_JT1078_BusinessType.主链路时效口令业务类.ToUInt16Value(); | public override ushort MsgId { get; }=JT809_JT1078_BusinessType.主链路时效口令业务类.ToUInt16Value(); | ||||
@@ -20,6 +22,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; }= "主链路时效口令交互消息"; | public override string Description { get; }= "主链路时效口令交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1700 value = new JT809_JT1078_0x1700(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1700 value = new JT809_JT1078_0x1700(); | JT809_JT1078_0x1700 value = new JT809_JT1078_0x1700(); | ||||
@@ -1,48 +1,64 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 时效口令上报消息 | /// 时效口令上报消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1700_0x1701 : JT809SubBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1700_0x1701> | |||||
public class JT809_JT1078_0x1700_0x1701 : JT809SubBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1700_0x1701>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 企业视频监控平台唯一编码,平台所属企业行政区域代码+平台公共编号 | /// 企业视频监控平台唯一编码,平台所属企业行政区域代码+平台公共编号 | ||||
/// </summary> | /// </summary> | ||||
public byte[] PlateFormId { get; set; } | |||||
public string PlateFormId { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 归属地区政府平台使用的时效口令 | /// 归属地区政府平台使用的时效口令 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode1 { get; set; } | |||||
public string AuthorizeCode1 { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 跨域地区政府平台使用的时效口令 | /// 跨域地区政府平台使用的时效口令 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode2 { get; set; } | |||||
public string AuthorizeCode2 { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.时效口令上报消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.时效口令上报消息.ToUInt16Value(); | ||||
public override string Description { get; }= "时效口令上报消息"; | public override string Description { get; }= "时效口令上报消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1700_0x1701 value = new JT809_JT1078_0x1700_0x1701(); | |||||
var virtualHex = reader.ReadVirtualArray(11); | |||||
value.PlateFormId = reader.ReadString(11); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]企业视频监控平台唯一编码",value.PlateFormId); | |||||
virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode1 = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]归属地区政府平台使用的时效口令", value.AuthorizeCode1); | |||||
virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode2 = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]跨域地区政府平台使用的时效口令", value.AuthorizeCode2); | |||||
} | |||||
public JT809_JT1078_0x1700_0x1701 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1700_0x1701 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1700_0x1701 jT808_JT1078_0X1701 = new JT809_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; | |||||
JT809_JT1078_0x1700_0x1701 value = new JT809_JT1078_0x1700_0x1701(); | |||||
value.PlateFormId = reader.ReadString(11); | |||||
value.AuthorizeCode1 = reader.ReadString(64); | |||||
value.AuthorizeCode2 = reader.ReadString(64); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1700_0x1701 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1700_0x1701 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteArray(value.PlateFormId); | |||||
writer.WriteArray(value.AuthorizeCode1); | |||||
writer.WriteArray(value.AuthorizeCode2); | |||||
writer.WriteStringPadRight(value.PlateFormId,11); | |||||
writer.WriteStringPadRight(value.AuthorizeCode1,64); | |||||
writer.WriteStringPadRight(value.AuthorizeCode2,64); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,17 +1,19 @@ | |||||
using JT809.Protocol.Enums; | using JT809.Protocol.Enums; | ||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 主链路实时音视频交互消息 | /// 主链路实时音视频交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1800 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800> | |||||
public class JT809_JT1078_0x1800 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } | public override ushort MsgId { get; } | ||||
@@ -19,6 +21,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主链路实时音视频交互消息"; | public override string Description { get; } = "主链路实时音视频交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1800 value = new JT809_JT1078_0x1800(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1800 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1800 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1800 value = new JT809_JT1078_0x1800(); | JT809_JT1078_0x1800 value = new JT809_JT1078_0x1800(); | ||||
@@ -1,21 +1,23 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 实时音视频请求应答消息 | /// 实时音视频请求应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1800_0x1801 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800_0x1801> | |||||
public class JT809_JT1078_0x1800_0x1801 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800_0x1801>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1800_0x1801_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 企业视频服务器ip地址 | /// 企业视频服务器ip地址 | ||||
/// 32 | /// 32 | ||||
@@ -30,18 +32,30 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "实时音视频请求应答消息"; | public override string Description { get; } = "实时音视频请求应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1800_0x1801 value = new JT809_JT1078_0x1800_0x1801(); | |||||
value.Result = (JT809_JT1078_0x1800_0x1801_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
var virtualHex = reader.ReadVirtualArray(32); | |||||
value.ServerIp = reader.ReadString(32); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]企业视频服务器ip地址", value.ServerIp); | |||||
value.ServerPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.ServerPort.ReadNumber()}]企业视频服务器端口号", value.ServerPort); | |||||
} | |||||
public JT809_JT1078_0x1800_0x1801 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1800_0x1801 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1800_0x1801 jT808_JT1078_0x1800_0x1801 = new JT809_JT1078_0x1800_0x1801(); | |||||
jT808_JT1078_0x1800_0x1801.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x1800_0x1801.ServerIp = reader.ReadString(32); | |||||
jT808_JT1078_0x1800_0x1801.ServerPort = reader.ReadUInt16(); | |||||
return jT808_JT1078_0x1800_0x1801; | |||||
JT809_JT1078_0x1800_0x1801 value = new JT809_JT1078_0x1800_0x1801(); | |||||
value.Result = (JT809_JT1078_0x1800_0x1801_Result)reader.ReadByte(); | |||||
value.ServerIp = reader.ReadString(32); | |||||
value.ServerPort = reader.ReadUInt16(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1800_0x1801 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1800_0x1801 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteStringPadLeft(value.ServerIp, 32); | writer.WriteStringPadLeft(value.ServerIp, 32); | ||||
writer.WriteUInt16(value.ServerPort); | writer.WriteUInt16(value.ServerPort); | ||||
} | } | ||||
@@ -1,36 +1,45 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 主动请求停止实时音视频传输应答消息 | /// 主动请求停止实时音视频传输应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1800_0x1802 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800_0x1802> | |||||
public class JT809_JT1078_0x1800_0x1802 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1800_0x1802>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1800_0x1802_Result Result { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.主动请求停止实时音视频传输应答消息.ToUInt16Value(); | ||||
public override string Description { get; } = "主动请求停止实时音视频传输应答消息"; | public override string Description { get; } = "主动请求停止实时音视频传输应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1800_0x1802 value = new JT809_JT1078_0x1800_0x1802(); | |||||
value.Result = (JT809_JT1078_0x1800_0x1802_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
} | |||||
public JT809_JT1078_0x1800_0x1802 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1800_0x1802 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1800_0x1802 jT808_JT1078_0x1800_0x1802 = new JT809_JT1078_0x1800_0x1802(); | |||||
jT808_JT1078_0x1800_0x1802.Result = reader.ReadByte(); | |||||
return jT808_JT1078_0x1800_0x1802; | |||||
JT809_JT1078_0x1800_0x1802 value = new JT809_JT1078_0x1800_0x1802(); | |||||
value.Result = (JT809_JT1078_0x1800_0x1802_Result)reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1800_0x1802 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1800_0x1802 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -2,17 +2,19 @@ | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 主链路远程录像检索交互消息 | /// 主链路远程录像检索交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1900 : JT809ExchangeMessageBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1900> | |||||
public class JT809_JT1078_0x1900 : JT809ExchangeMessageBodies,IJT809MessagePackFormatter<JT809_JT1078_0x1900>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像检索业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像检索业务类.ToUInt16Value(); | ||||
@@ -20,6 +22,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主链路远程录像检索交互消息"; | public override string Description { get; } = "主链路远程录像检索交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1900 value = new JT809_JT1078_0x1900(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1900 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1900 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1900 value = new JT809_JT1078_0x1900(); | JT809_JT1078_0x1900 value = new JT809_JT1078_0x1900(); | ||||
@@ -1,14 +1,16 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 主动上传音视频资源目录信息消息 | /// 主动上传音视频资源目录信息消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1900_0x1901 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1900_0x1901> | |||||
public class JT809_JT1078_0x1900_0x1901 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1900_0x1901>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 资源目录项数目 | /// 资源目录项数目 | ||||
@@ -23,22 +25,42 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主动上传音视频资源目录信息消息"; | public override string Description { get; } = "主动上传音视频资源目录信息消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1900_0x1901 value = new JT809_JT1078_0x1900_0x1901(); | |||||
value.ItemNum = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.ItemNum.ReadNumber() }]资源目录项数目", value.ItemNum); | |||||
if (value.ItemNum > 0) | |||||
{ | |||||
writer.WriteStartArray("资源目录项列表"); | |||||
List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | |||||
var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | |||||
for (int i = 0; i < value.ItemNum; i++) | |||||
{ | |||||
writer.WriteStartObject(); | |||||
formatter.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
writer.WriteEndArray(); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1900_0x1901 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1900_0x1901 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1900_0x1901 jT808_JT1078_0x1900_0x1901 = new JT809_JT1078_0x1900_0x1901(); | |||||
jT808_JT1078_0x1900_0x1901.ItemNum = reader.ReadUInt32(); | |||||
if (jT808_JT1078_0x1900_0x1901.ItemNum > 0) | |||||
JT809_JT1078_0x1900_0x1901 value = new JT809_JT1078_0x1900_0x1901(); | |||||
value.ItemNum = reader.ReadUInt32(); | |||||
if (value.ItemNum > 0) | |||||
{ | { | ||||
List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | ||||
var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | ||||
for (int i = 0; i < jT808_JT1078_0x1900_0x1901.ItemNum; i++) | |||||
for (int i = 0; i < value.ItemNum; i++) | |||||
{ | { | ||||
var jT808_JT1078_0x1900_0x1901_Record = formatter.Deserialize(ref reader, config); | var jT808_JT1078_0x1900_0x1901_Record = formatter.Deserialize(ref reader, config); | ||||
jT808_JT1078_0x1900_0x1901_RecordList.Add(jT808_JT1078_0x1900_0x1901_Record); | jT808_JT1078_0x1900_0x1901_RecordList.Add(jT808_JT1078_0x1900_0x1901_Record); | ||||
} | } | ||||
jT808_JT1078_0x1900_0x1901.ItemList = jT808_JT1078_0x1900_0x1901_RecordList; | |||||
value.ItemList = jT808_JT1078_0x1900_0x1901_RecordList; | |||||
} | } | ||||
return jT808_JT1078_0x1900_0x1901; | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_0x1901 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_0x1901 value, IJT809Config config) | ||||
@@ -1,19 +1,21 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 查询音视频资源目录应答消息 | /// 查询音视频资源目录应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1900_0x1902 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1900_0x1902> | |||||
public class JT809_JT1078_0x1900_0x1902 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1900_0x1902>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1900_0x1902_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 资源目录项数目 | /// 资源目录项数目 | ||||
/// </summary> | /// </summary> | ||||
@@ -28,28 +30,51 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "查询音视频资源目录应答消息"; | public override string Description { get; } = "查询音视频资源目录应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1900_0x1902 value = new JT809_JT1078_0x1900_0x1902(); | |||||
value.Result = (JT809_JT1078_0x1900_0x1902_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber() }]应答结果", value.Result.ToString()); | |||||
value.ItemNum = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.ItemNum.ReadNumber() }]资源目录项数目", value.ItemNum); | |||||
if (value.ItemNum > 0) | |||||
{ | |||||
writer.WriteStartArray("资源目录项列表"); | |||||
List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | |||||
var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | |||||
for (int i = 0; i < value.ItemNum; i++) | |||||
{ | |||||
writer.WriteStartObject(); | |||||
formatter.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
writer.WriteEndArray(); | |||||
value.ItemList = jT808_JT1078_0x1900_0x1901_RecordList; | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1900_0x1902 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1900_0x1902 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1900_0x1902 jT808_JT1078_0x1900_0x1902 = new JT809_JT1078_0x1900_0x1902(); | |||||
jT808_JT1078_0x1900_0x1902.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x1900_0x1902.ItemNum = reader.ReadUInt32(); | |||||
if (jT808_JT1078_0x1900_0x1902.ItemNum > 0) | |||||
JT809_JT1078_0x1900_0x1902 value = new JT809_JT1078_0x1900_0x1902(); | |||||
value.Result = (JT809_JT1078_0x1900_0x1902_Result)reader.ReadByte(); | |||||
value.ItemNum = reader.ReadUInt32(); | |||||
if (value.ItemNum > 0) | |||||
{ | { | ||||
List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | List<JT809_JT1078_0x1900_Record> jT808_JT1078_0x1900_0x1901_RecordList = new List<JT809_JT1078_0x1900_Record>(); | ||||
var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | var formatter = config.GetMessagePackFormatter<JT809_JT1078_0x1900_Record>(); | ||||
for (int i = 0; i < jT808_JT1078_0x1900_0x1902.ItemNum; i++) | |||||
for (int i = 0; i < value.ItemNum; i++) | |||||
{ | { | ||||
var jT808_JT1078_0x1900_0x1901_Record = formatter.Deserialize(ref reader, config); | var jT808_JT1078_0x1900_0x1901_Record = formatter.Deserialize(ref reader, config); | ||||
jT808_JT1078_0x1900_0x1901_RecordList.Add(jT808_JT1078_0x1900_0x1901_Record); | jT808_JT1078_0x1900_0x1901_RecordList.Add(jT808_JT1078_0x1900_0x1901_Record); | ||||
} | } | ||||
jT808_JT1078_0x1900_0x1902.ItemList = jT808_JT1078_0x1900_0x1901_RecordList; | |||||
value.ItemList = jT808_JT1078_0x1900_0x1901_RecordList; | |||||
} | } | ||||
return jT808_JT1078_0x1900_0x1902; | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_0x1902 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_0x1902 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteUInt32(value.ItemNum); | writer.WriteUInt32(value.ItemNum); | ||||
if (value.ItemList.Count > 0) | if (value.ItemList.Count > 0) | ||||
{ | { | ||||
@@ -1,15 +1,17 @@ | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 上传音视频资源目录项 | /// 上传音视频资源目录项 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1900_Record : IJT809MessagePackFormatter<JT809_JT1078_0x1900_Record> | |||||
public class JT809_JT1078_0x1900_Record : IJT809MessagePackFormatter<JT809_JT1078_0x1900_Record>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -43,18 +45,119 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// 文件大小 | /// 文件大小 | ||||
/// </summary> | /// </summary> | ||||
public uint FileSize { get; set; } | public uint FileSize { get; set; } | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1900_Record value = new JT809_JT1078_0x1900_Record(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
var virtualHex = reader.ReadVirtualArray(8); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]开始时间", value.StartTime); | |||||
virtualHex = reader.ReadVirtualArray(8); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]结束时间", value.StartTime); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
writer.WriteNumber($"[{value.AlarmType.ReadNumber()}]报警标志物", value.AlarmType); | |||||
value.AVItemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType)); | |||||
value.StreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | |||||
value.MemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType)); | |||||
value.FileSize = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小(B)", value.FileSize); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
string StreamTypeDisplay(byte StreamType) | |||||
{ | |||||
switch (StreamType) | |||||
{ | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
string MemoryTypeDisplay(byte MemoryType) | |||||
{ | |||||
switch (MemoryType) | |||||
{ | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备存储器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1900_Record Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1900_Record Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1900_Record jT808_JT1078_0x1900_0x1901_Record = new JT809_JT1078_0x1900_Record(); | |||||
jT808_JT1078_0x1900_0x1901_Record.ChannelId = reader.ReadByte(); | |||||
jT808_JT1078_0x1900_0x1901_Record.StartTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x1900_0x1901_Record.EndTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x1900_0x1901_Record.AlarmType = reader.ReadUInt64(); | |||||
jT808_JT1078_0x1900_0x1901_Record.AVItemType = reader.ReadByte(); | |||||
jT808_JT1078_0x1900_0x1901_Record.StreamType = reader.ReadByte(); | |||||
jT808_JT1078_0x1900_0x1901_Record.MemType = reader.ReadByte(); | |||||
jT808_JT1078_0x1900_0x1901_Record.FileSize = reader.ReadUInt32(); | |||||
return jT808_JT1078_0x1900_0x1901_Record; | |||||
JT809_JT1078_0x1900_Record value = new JT809_JT1078_0x1900_Record(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
value.AVItemType = reader.ReadByte(); | |||||
value.StreamType = reader.ReadByte(); | |||||
value.MemType = reader.ReadByte(); | |||||
value.FileSize = reader.ReadUInt32(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_Record value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1900_Record value, IJT809Config config) | ||||
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 主链路远程录像回放交互消息 | /// 主链路远程录像回放交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1A00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00> | |||||
public class JT809_JT1078_0x1A00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像回放业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像回放业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主链路远程录像回放交互消息"; | public override string Description { get; } = "主链路远程录像回放交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1A00 value = new JT809_JT1078_0x1A00(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1A00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1A00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1A00 value = new JT809_JT1078_0x1A00(); | JT809_JT1078_0x1A00 value = new JT809_JT1078_0x1A00(); | ||||
@@ -1,16 +1,18 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像回放请求应答消息 | /// 远程录像回放请求应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1A00_0x1A01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00_0x1A01> | |||||
public class JT809_JT1078_0x1A00_0x1A01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00_0x1A01>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 企业视频服务器ip地址 | /// 企业视频服务器ip地址 | ||||
@@ -24,26 +26,38 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1A00_0x1A01_Result Result { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放请求应答消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放请求应答消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像回放请求应答消息"; | public override string Description { get; } = "远程录像回放请求应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1A00_0x1A01 value = new JT809_JT1078_0x1A00_0x1A01(); | |||||
var virtualHex = reader.ReadVirtualArray(32); | |||||
value.ServerIp = reader.ReadString(32); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]企业视频服务器ip地址", value.ServerIp); | |||||
value.ServerPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.ServerPort.ReadNumber()}]企业视频服务器端口号", value.ServerPort); | |||||
value.Result = (JT809_JT1078_0x1A00_0x1A01_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
} | |||||
public JT809_JT1078_0x1A00_0x1A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1A00_0x1A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1A00_0x1A01 jT808_JT1078_0x1A00_0x1A01 = new JT809_JT1078_0x1A00_0x1A01(); | |||||
jT808_JT1078_0x1A00_0x1A01.ServerIp = reader.ReadString(32); | |||||
jT808_JT1078_0x1A00_0x1A01.ServerPort = reader.ReadUInt16(); | |||||
jT808_JT1078_0x1A00_0x1A01.Result = reader.ReadByte(); | |||||
return jT808_JT1078_0x1A00_0x1A01; | |||||
JT809_JT1078_0x1A00_0x1A01 value = new JT809_JT1078_0x1A00_0x1A01(); | |||||
value.ServerIp = reader.ReadString(32); | |||||
value.ServerPort = reader.ReadUInt16(); | |||||
value.Result = (JT809_JT1078_0x1A00_0x1A01_Result)reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1A00_0x1A01 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1A00_0x1A01 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteStringPadLeft(value.ServerIp, 32); | writer.WriteStringPadLeft(value.ServerIp, 32); | ||||
writer.WriteUInt16(value.ServerPort); | writer.WriteUInt16(value.ServerPort); | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,27 +9,34 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 远程录像回放控制应答消息 | /// 远程录像回放控制应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1A00_0x1A02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00_0x1A02> | |||||
public class JT809_JT1078_0x1A00_0x1A02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1A00_0x1A02>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1A00_0x1A02_Result Result { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放控制应答消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放控制应答消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像回放控制应答消息"; | public override string Description { get; } = "远程录像回放控制应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1A00_0x1A02 value = new JT809_JT1078_0x1A00_0x1A02(); | |||||
value.Result = (JT809_JT1078_0x1A00_0x1A02_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
} | |||||
public JT809_JT1078_0x1A00_0x1A02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1A00_0x1A02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1A00_0x1A02 jT808_JT1078_0x1A00_0x1A02 = new JT809_JT1078_0x1A00_0x1A02(); | |||||
jT808_JT1078_0x1A00_0x1A02.Result = reader.ReadByte(); | |||||
return jT808_JT1078_0x1A00_0x1A02; | |||||
JT809_JT1078_0x1A00_0x1A02 value = new JT809_JT1078_0x1A00_0x1A02(); | |||||
value.Result = (JT809_JT1078_0x1A00_0x1A02_Result)reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1A00_0x1A02 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1A00_0x1A02 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 主链路远程录像下载交互消息 | /// 主链路远程录像下载交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1B00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00> | |||||
public class JT809_JT1078_0x1B00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像下载业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.主链路远程录像下载业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,38 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主链路远程录像下载交互消息"; | public override string Description { get; } = "主链路远程录像下载交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1B00 value = new JT809_JT1078_0x1B00(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x1B00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1B00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
@@ -1,21 +1,23 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载请求应答消息 | /// 远程录像下载请求应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1B00_0x1B01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B01> | |||||
public class JT809_JT1078_0x1B00_0x1B01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B01>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1B00_0x1B01_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 对应平台文件上传消息的流水号 | /// 对应平台文件上传消息的流水号 | ||||
/// </summary> | /// </summary> | ||||
@@ -25,17 +27,26 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "远程录像下载请求应答消息"; | public override string Description { get; } = "远程录像下载请求应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1B00_0x1B01 value = new JT809_JT1078_0x1B00_0x1B01(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B01_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber() }]应答结果", value.Result.ToString()); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.SessionId.ReadNumber()}]对应平台文件上传消息的流水号", value.SessionId); | |||||
} | |||||
public JT809_JT1078_0x1B00_0x1B01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1B00_0x1B01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1B00_0x1B01 jT808_JT1078_0x1B00_0x1B01 = new JT809_JT1078_0x1B00_0x1B01(); | |||||
jT808_JT1078_0x1B00_0x1B01.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x1B00_0x1B01.SessionId = reader.ReadUInt16(); | |||||
return jT808_JT1078_0x1B00_0x1B01; | |||||
JT809_JT1078_0x1B00_0x1B01 value = new JT809_JT1078_0x1B00_0x1B01(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B01_Result)reader.ReadByte(); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B01 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B01 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteUInt16(value.SessionId); | writer.WriteUInt16(value.SessionId); | ||||
} | } | ||||
} | } |
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,12 +9,12 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载通知消息 | /// 远程录像下载通知消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1B00_0x1B02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B02> | |||||
public class JT809_JT1078_0x1B00_0x1B02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B02>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1B00_0x1B02_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 对应平台文件上传消息的流水号 | /// 对应平台文件上传消息的流水号 | ||||
/// </summary> | /// </summary> | ||||
@@ -45,22 +47,45 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "远程录像下载通知消息"; | public override string Description { get; } = "远程录像下载通知消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1B00_0x1B02 value = new JT809_JT1078_0x1B00_0x1B02(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B02_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber() }]应答结果", value.Result.ToString()); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.SessionId.ReadNumber()}]对应平台文件上传消息的流水号", value.SessionId); | |||||
var virtualHex = reader.ReadVirtualArray(32); | |||||
value.ServerIp = reader.ReadString(32); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]FTP服务器ip地址", value.ServerIp); | |||||
value.TcpPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]FTP服务器端口", value.TcpPort); | |||||
virtualHex = reader.ReadVirtualArray(49); | |||||
value.UserName = reader.ReadString(49); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]FTP用户名", value.UserName); | |||||
virtualHex = reader.ReadVirtualArray(22); | |||||
value.Password = reader.ReadString(22); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]FTP密码", value.Password); | |||||
virtualHex = reader.ReadVirtualArray(200); | |||||
value.FilePath = reader.ReadString(200); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]文件存储路径", value.FilePath); | |||||
} | |||||
public JT809_JT1078_0x1B00_0x1B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1B00_0x1B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1B00_0x1B02 jT808_JT1078_0x1B00_0x1B02 = new JT809_JT1078_0x1B00_0x1B02(); | |||||
jT808_JT1078_0x1B00_0x1B02.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x1B00_0x1B02.SessionId = reader.ReadUInt16(); | |||||
jT808_JT1078_0x1B00_0x1B02.ServerIp = reader.ReadString(32); | |||||
jT808_JT1078_0x1B00_0x1B02.TcpPort = reader.ReadUInt16(); | |||||
jT808_JT1078_0x1B00_0x1B02.UserName = reader.ReadString(49); | |||||
jT808_JT1078_0x1B00_0x1B02.Password = reader.ReadString(22); | |||||
jT808_JT1078_0x1B00_0x1B02.FilePath = reader.ReadString(200); | |||||
return jT808_JT1078_0x1B00_0x1B02; | |||||
JT809_JT1078_0x1B00_0x1B02 value = new JT809_JT1078_0x1B00_0x1B02(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B02_Result)reader.ReadByte(); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
value.ServerIp = reader.ReadString(32); | |||||
value.TcpPort = reader.ReadUInt16(); | |||||
value.UserName = reader.ReadString(49); | |||||
value.Password = reader.ReadString(22); | |||||
value.FilePath = reader.ReadString(200); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B02 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B02 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteUInt16(value.SessionId); | writer.WriteUInt16(value.SessionId); | ||||
writer.WriteStringPadLeft(value.ServerIp, 32); | writer.WriteStringPadLeft(value.ServerIp, 32); | ||||
writer.WriteUInt16(value.TcpPort); | writer.WriteUInt16(value.TcpPort); | ||||
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,27 +9,34 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载控制应答消息 | /// 远程录像下载控制应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x1B00_0x1B03 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B03> | |||||
public class JT809_JT1078_0x1B00_0x1B03 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x1B00_0x1B03>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x1B00_0x1B03_Result Result { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载控制应答消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载控制应答消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像下载控制应答消息"; | public override string Description { get; } = "远程录像下载控制应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x1B00_0x1B03 value = new JT809_JT1078_0x1B00_0x1B03(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B03_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
} | |||||
public JT809_JT1078_0x1B00_0x1B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x1B00_0x1B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x1B00_0x1B03 jT808_JT1078_0x1B00_0x1B01 = new JT809_JT1078_0x1B00_0x1B03(); | |||||
jT808_JT1078_0x1B00_0x1B01.Result = reader.ReadByte(); | |||||
return jT808_JT1078_0x1B00_0x1B01; | |||||
JT809_JT1078_0x1B00_0x1B03 value = new JT809_JT1078_0x1B00_0x1B03(); | |||||
value.Result = (JT809_JT1078_0x1B00_0x1B03_Result)reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B03 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x1B00_0x1B03 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 从链路时效口令交互消息 | /// 从链路时效口令交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9700 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9700> | |||||
public class JT809_JT1078_0x9700 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9700>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路时效口令业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路时效口令业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "从链路时效口令交互消息"; | public override string Description { get; } = "从链路时效口令交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9700 value = new JT809_JT1078_0x9700(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9700 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9700 value = new JT809_JT1078_0x9700(); | JT809_JT1078_0x9700 value = new JT809_JT1078_0x9700(); | ||||
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 从链路实时音视频交互信息 | /// 从链路实时音视频交互信息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9800 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800> | |||||
public class JT809_JT1078_0x9800 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路实时音视频业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路实时音视频业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "从链路实时音视频交互信息"; | public override string Description { get; } = "从链路实时音视频交互信息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9800 value = new JT809_JT1078_0x9800(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9800 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9800 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9800 value = new JT809_JT1078_0x9800(); | JT809_JT1078_0x9800 value = new JT809_JT1078_0x9800(); | ||||
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,7 +9,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 实时音视频请求消息 | /// 实时音视频请求消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9800_0x9801 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800_0x9801> | |||||
public class JT809_JT1078_0x9800_0x9801 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800_0x9801>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -20,7 +22,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 时效口令 | /// 时效口令 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode { get; set; } | |||||
public string AuthorizeCode { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 车辆进入跨域地区后5min之内的任何位置,仅跨域访问请求时使用此字段 | /// 车辆进入跨域地区后5min之内的任何位置,仅跨域访问请求时使用此字段 | ||||
/// </summary> | /// </summary> | ||||
@@ -30,21 +32,89 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "实时音视频请求消息"; | public override string Description { get; } = "实时音视频请求消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9800_0x9801 value = new JT809_JT1078_0x9800_0x9801(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
value.AVitemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVitemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVitemType)); | |||||
var virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode); | |||||
virtualHex = reader.ReadVirtualArray(36); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内的任何位置", virtualHex.ToArray().ToHexString()); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9800_0x9801 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9800_0x9801 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9800_0x9801 jT808_JT1078_0x9800_0x9801 = new JT809_JT1078_0x9800_0x9801(); | |||||
jT808_JT1078_0x9800_0x9801.ChannelId = reader.ReadByte(); | |||||
jT808_JT1078_0x9800_0x9801.AVitemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9800_0x9801.AuthorizeCode = reader.ReadArray(64).ToArray(); | |||||
jT808_JT1078_0x9800_0x9801.GnssData = reader.ReadArray(36).ToArray(); | |||||
return jT808_JT1078_0x9800_0x9801; | |||||
JT809_JT1078_0x9800_0x9801 value = new JT809_JT1078_0x9800_0x9801(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.AVitemType = reader.ReadByte(); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9800_0x9801 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9800_0x9801 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.ChannelId); | writer.WriteByte(value.ChannelId); | ||||
writer.WriteByte(value.AVitemType); | writer.WriteByte(value.AVitemType); | ||||
writer.WriteArray(value.AuthorizeCode); | |||||
writer.WriteStringPadRight(value.AuthorizeCode,64); | |||||
writer.WriteArray(value.GnssData); | writer.WriteArray(value.GnssData); | ||||
} | } | ||||
} | } |
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,7 +9,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 主动请求停止实时音视频传输消息 | /// 主动请求停止实时音视频传输消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9800_0x9802 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800_0x9802> | |||||
public class JT809_JT1078_0x9800_0x9802 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9800_0x9802>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -22,12 +24,74 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主动请求停止实时音视频传输消息"; | public override string Description { get; } = "主动请求停止实时音视频传输消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9800_0x9802 value = new JT809_JT1078_0x9800_0x9802(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
value.AVitemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVitemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVitemType)); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9800_0x9802 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9800_0x9802 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9800_0x9802 jT808_JT1078_0x9800_0x9802 = new JT809_JT1078_0x9800_0x9802(); | |||||
jT808_JT1078_0x9800_0x9802.ChannelId = reader.ReadByte(); | |||||
jT808_JT1078_0x9800_0x9802.AVitemType = reader.ReadByte(); | |||||
return jT808_JT1078_0x9800_0x9802; | |||||
JT809_JT1078_0x9800_0x9802 value = new JT809_JT1078_0x9800_0x9802(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.AVitemType = reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9800_0x9802 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9800_0x9802 value, IJT809Config config) | ||||
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 从链路远程录像检索交互消息 | /// 从链路远程录像检索交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9900 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900> | |||||
public class JT809_JT1078_0x9900 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像检索业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像检索业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "从链路远程录像检索交互消息"; | public override string Description { get; } = "从链路远程录像检索交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9900 value = new JT809_JT1078_0x9900(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9900 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9900 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9900 value = new JT809_JT1078_0x9900(); | JT809_JT1078_0x9900 value = new JT809_JT1078_0x9900(); | ||||
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,12 +9,12 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 主动上传音视频资源目录信息应答消息 | /// 主动上传音视频资源目录信息应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9900_0x9901 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900_0x9901> | |||||
public class JT809_JT1078_0x9900_0x9901 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900_0x9901>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x9900_0x9901_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 资源目录总数 | /// 资源目录总数 | ||||
/// </summary> | /// </summary> | ||||
@@ -22,17 +24,26 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "主动上传音视频资源目录信息应答消息"; | public override string Description { get; } = "主动上传音视频资源目录信息应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9900_0x9901 value = new JT809_JT1078_0x9900_0x9901(); | |||||
value.Result = (JT809_JT1078_0x9900_0x9901_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{ (byte)value.Result }]应答结果", value.Result.ToString()); | |||||
value.ItemNumber = reader.ReadByte(); | |||||
writer.WriteNumber($"[{value.ItemNumber.ReadNumber()}]资源目录总数", value.ItemNumber); | |||||
} | |||||
public JT809_JT1078_0x9900_0x9901 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9900_0x9901 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9900_0x9901 jT808_JT1078_0x9900_0x9901 = new JT809_JT1078_0x9900_0x9901(); | |||||
jT808_JT1078_0x9900_0x9901.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x9900_0x9901.ItemNumber = reader.ReadByte(); | |||||
return jT808_JT1078_0x9900_0x9901; | |||||
JT809_JT1078_0x9900_0x9901 value = new JT809_JT1078_0x9900_0x9901(); | |||||
value.Result = (JT809_JT1078_0x9900_0x9901_Result)reader.ReadByte(); | |||||
value.ItemNumber = reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9900_0x9901 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9900_0x9901 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteByte(value.ItemNumber); | writer.WriteByte(value.ItemNumber); | ||||
} | } | ||||
} | } |
@@ -1,14 +1,16 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 查询音视频资源目录请求消息 | /// 查询音视频资源目录请求消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9900_0x9902 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900_0x9902> | |||||
public class JT809_JT1078_0x9900_0x9902 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9900_0x9902>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -42,7 +44,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// 时效口令 | /// 时效口令 | ||||
/// 64 | /// 64 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode { get; set; } | |||||
public string AuthorizeCode { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | /// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | ||||
/// 36 | /// 36 | ||||
@@ -53,20 +55,123 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "查询音视频资源目录请求消息"; | public override string Description { get; } = "查询音视频资源目录请求消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9900_0x9902 value = new JT809_JT1078_0x9900_0x9902(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
var virtualHex = reader.ReadVirtualArray(8); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]开始时间", value.StartTime); | |||||
virtualHex = reader.ReadVirtualArray(8); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]结束时间", value.StartTime); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
writer.WriteNumber($"[{value.AlarmType.ReadNumber()}]报警标志物", value.AlarmType); | |||||
value.AVItemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType)); | |||||
value.StreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | |||||
value.MemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType)); | |||||
virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode); | |||||
virtualHex = reader.ReadVirtualArray(36); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内任一位置", virtualHex.ToArray().ToHexString()); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
string StreamTypeDisplay(byte StreamType) | |||||
{ | |||||
switch (StreamType) | |||||
{ | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
string MemoryTypeDisplay(byte MemoryType) | |||||
{ | |||||
switch (MemoryType) | |||||
{ | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备存储器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9900_0x9902 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9900_0x9902 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9900_0x9902 jT808_JT1078_0x9900_0x9902 = new JT809_JT1078_0x9900_0x9902(); | |||||
jT808_JT1078_0x9900_0x9902.ChannelId = reader.ReadByte(); | |||||
#warning 此处时间8个字节,暂使用utc时间代替 | |||||
jT808_JT1078_0x9900_0x9902.StartTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9900_0x9902.EndTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9900_0x9902.AlarmType = reader.ReadUInt64(); | |||||
jT808_JT1078_0x9900_0x9902.AVItemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9900_0x9902.StreamType = reader.ReadByte(); | |||||
jT808_JT1078_0x9900_0x9902.MemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9900_0x9902.AuthorizeCode = reader.ReadArray(64).ToArray(); | |||||
jT808_JT1078_0x9900_0x9902.GnssData = reader.ReadArray(36).ToArray(); | |||||
return jT808_JT1078_0x9900_0x9902; | |||||
JT809_JT1078_0x9900_0x9902 value = new JT809_JT1078_0x9900_0x9902(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
value.AVItemType = reader.ReadByte(); | |||||
value.StreamType = reader.ReadByte(); | |||||
value.MemType = reader.ReadByte(); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9900_0x9902 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9900_0x9902 value, IJT809Config config) | ||||
@@ -78,7 +183,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteByte(value.AVItemType); | writer.WriteByte(value.AVItemType); | ||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
writer.WriteByte(value.MemType); | writer.WriteByte(value.MemType); | ||||
writer.WriteArray(value.AuthorizeCode); | |||||
writer.WriteStringPadRight(value.AuthorizeCode, 64); | |||||
writer.WriteArray(value.GnssData); | writer.WriteArray(value.GnssData); | ||||
} | } | ||||
} | } |
@@ -1,7 +1,9 @@ | |||||
using JT809.Protocol.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -9,7 +11,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 从链路远程录像回放交互消息 | /// 从链路远程录像回放交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9A00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00> | |||||
public class JT809_JT1078_0x9A00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像回放业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像回放业务类.ToUInt16Value(); | ||||
@@ -17,6 +19,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "从链路远程录像回放交互消息"; | public override string Description { get; } = "从链路远程录像回放交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9A00 value = new JT809_JT1078_0x9A00(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9A00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9A00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9A00 value = new JT809_JT1078_0x9A00(); | JT809_JT1078_0x9A00 value = new JT809_JT1078_0x9A00(); | ||||
@@ -1,14 +1,16 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像回放请求消息 | /// 远程录像回放请求消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9A00_0x9A01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00_0x9A01> | |||||
public class JT809_JT1078_0x9A00_0x9A01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00_0x9A01>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -38,7 +40,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// 时效口令 | /// 时效口令 | ||||
/// 64 | /// 64 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode { get; set; } | |||||
public string AuthorizeCode { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | /// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | ||||
/// 36 | /// 36 | ||||
@@ -49,18 +51,120 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "远程录像回放请求消息"; | public override string Description { get; } = "远程录像回放请求消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9A00_0x9A01 value = new JT809_JT1078_0x9A00_0x9A01(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
value.AVItemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType)); | |||||
value.StreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | |||||
value.MemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType)); | |||||
var virtualHex = reader.ReadVirtualArray(8); | |||||
value.PlayBackStartTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]回放开始时间", value.PlayBackStartTime); | |||||
virtualHex = reader.ReadVirtualArray(8); | |||||
value.PlayBackEndTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]回放结束时间", value.PlayBackEndTime); | |||||
virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode); | |||||
virtualHex = reader.ReadVirtualArray(36); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内任一位置", virtualHex.ToArray().ToHexString()); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
string StreamTypeDisplay(byte StreamType) | |||||
{ | |||||
switch (StreamType) | |||||
{ | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
string MemoryTypeDisplay(byte MemoryType) | |||||
{ | |||||
switch (MemoryType) | |||||
{ | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备存储器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9A00_0x9A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9A00_0x9A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9A00_0x9A01 jT808_JT1078_0x9A00_0x9A01 = new JT809_JT1078_0x9A00_0x9A01(); | |||||
jT808_JT1078_0x9A00_0x9A01.ChannelId = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A01.AVItemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A01.StreamType = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A01.MemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A01.PlayBackStartTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9A00_0x9A01.PlayBackEndTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9A00_0x9A01.AuthorizeCode = reader.ReadArray(64).ToArray(); | |||||
jT808_JT1078_0x9A00_0x9A01.GnssData = reader.ReadArray(36).ToArray(); | |||||
return jT808_JT1078_0x9A00_0x9A01; | |||||
JT809_JT1078_0x9A00_0x9A01 value = new JT809_JT1078_0x9A00_0x9A01(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.AVItemType = reader.ReadByte(); | |||||
value.StreamType = reader.ReadByte(); | |||||
value.MemType = reader.ReadByte(); | |||||
value.PlayBackStartTime = reader.ReadUTCDateTime(); | |||||
value.PlayBackEndTime = reader.ReadUTCDateTime(); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9A00_0x9A01 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9A00_0x9A01 value, IJT809Config config) | ||||
@@ -71,7 +175,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteByte(value.MemType); | writer.WriteByte(value.MemType); | ||||
writer.WriteUTCDateTime(value.PlayBackStartTime); | writer.WriteUTCDateTime(value.PlayBackStartTime); | ||||
writer.WriteUTCDateTime(value.PlayBackEndTime); | writer.WriteUTCDateTime(value.PlayBackEndTime); | ||||
writer.WriteArray(value.AuthorizeCode); | |||||
writer.WriteStringPadRight(value.AuthorizeCode, 64); | |||||
writer.WriteArray(value.GnssData); | writer.WriteArray(value.GnssData); | ||||
} | } | ||||
} | } |
@@ -1,23 +1,25 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像回放控制消息 | /// 远程录像回放控制消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9A00_0x9A02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00_0x9A02> | |||||
public class JT809_JT1078_0x9A00_0x9A02 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9A00_0x9A02>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 控制类型 | /// 控制类型 | ||||
/// </summary> | /// </summary> | ||||
public byte ControlType { get; set; } | |||||
public ControlType ControlType { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 快进或倒退倍数 | /// 快进或倒退倍数 | ||||
/// </summary> | /// </summary> | ||||
public byte FastTime { get; set; } | |||||
public FastTime FastTime { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 拖动位置 | /// 拖动位置 | ||||
/// </summary> | /// </summary> | ||||
@@ -26,19 +28,32 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放控制消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像回放控制消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像回放控制消息"; | public override string Description { get; } = "远程录像回放控制消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9A00_0x9A02 value = new JT809_JT1078_0x9A00_0x9A02(); | |||||
value.ControlType = (ControlType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.ControlType).ReadNumber()}]控制类型", value.ControlType.ToString()); | |||||
value.FastTime = (FastTime)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.FastTime).ReadNumber()}]快进或倒退倍数", value.FastTime.ToString()); | |||||
var virtualHex = reader.ReadVirtualArray(8); | |||||
value.DateTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]拖动位置", value.DateTime); | |||||
} | |||||
public JT809_JT1078_0x9A00_0x9A02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9A00_0x9A02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9A00_0x9A02 jT808_JT1078_0x9A00_0x9A02 = new JT809_JT1078_0x9A00_0x9A02(); | |||||
jT808_JT1078_0x9A00_0x9A02.ControlType = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A02.FastTime = reader.ReadByte(); | |||||
jT808_JT1078_0x9A00_0x9A02.DateTime = reader.ReadUTCDateTime(); | |||||
return jT808_JT1078_0x9A00_0x9A02; | |||||
JT809_JT1078_0x9A00_0x9A02 value = new JT809_JT1078_0x9A00_0x9A02(); | |||||
value.ControlType = (ControlType)reader.ReadByte(); | |||||
value.FastTime = (FastTime)reader.ReadByte(); | |||||
value.DateTime = reader.ReadUTCDateTime(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9A00_0x9A02 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9A00_0x9A02 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.ControlType); | |||||
writer.WriteByte(value.FastTime); | |||||
writer.WriteByte((byte)value.ControlType); | |||||
writer.WriteByte((byte)value.FastTime); | |||||
writer.WriteUTCDateTime(value.DateTime); | writer.WriteUTCDateTime(value.DateTime); | ||||
} | } | ||||
} | } |
@@ -2,17 +2,19 @@ | |||||
using JT809.Protocol.Exceptions; | using JT809.Protocol.Exceptions; | ||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 从链路远程录像下载交互消息 | /// 从链路远程录像下载交互消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9B00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00> | |||||
public class JT809_JT1078_0x9B00 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00>, IJT809Analyze | |||||
{ | { | ||||
public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像下载业务类.ToUInt16Value(); | public override ushort MsgId { get; } = JT809_JT1078_BusinessType.从链路远程录像下载业务类.ToUInt16Value(); | ||||
@@ -20,6 +22,39 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "从链路远程录像下载交互消息"; | public override string Description { get; } = "从链路远程录像下载交互消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9B00 value = new JT809_JT1078_0x9B00(); | |||||
var virtualHex = reader.ReadVirtualArray(21); | |||||
value.VehicleNo = reader.ReadString(21); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); | |||||
value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString()); | |||||
value.SubBusinessType = reader.ReadUInt16(); | |||||
writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); | |||||
value.DataLength = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); | |||||
try | |||||
{ | |||||
if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) | |||||
{ | |||||
if (instance is JT809SubBodies subBodies) | |||||
{ | |||||
if (!subBodies.SkipSerialization) | |||||
{ | |||||
writer.WriteStartObject("子业务类型"); | |||||
instance.Analyze(ref reader, writer, config); | |||||
writer.WriteEndObject(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
catch | |||||
{ | |||||
throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9B00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9B00 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9B00 value = new JT809_JT1078_0x9B00(); | JT809_JT1078_0x9B00 value = new JT809_JT1078_0x9B00(); | ||||
@@ -2,17 +2,19 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Extensions.JT1078.Formatters; | using JT809.Protocol.Extensions.JT1078.Formatters; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载请求消息 | /// 远程录像下载请求消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9B00_0x9B01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B01> | |||||
public class JT809_JT1078_0x9B00_0x9B01 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B01>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
@@ -50,7 +52,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// 时效口令 | /// 时效口令 | ||||
/// 64 | /// 64 | ||||
/// </summary> | /// </summary> | ||||
public byte[] AuthorizeCode { get; set; } | |||||
public string AuthorizeCode { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | /// 车辆进入跨域地区后5min之内任一位置,仅跨域访问请求时,使用此字段 | ||||
/// 36 | /// 36 | ||||
@@ -60,20 +62,127 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载请求消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载请求消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像下载请求消息"; | public override string Description { get; } = "远程录像下载请求消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9B00_0x9B01 value = new JT809_JT1078_0x9B00_0x9B01(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelId.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelId)); | |||||
var virtualHex = reader.ReadVirtualArray(8); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]开始时间", value.StartTime); | |||||
virtualHex = reader.ReadVirtualArray(8); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]结束时间", value.StartTime); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
writer.WriteNumber($"[{value.AlarmType.ReadNumber()}]报警标志物", value.AlarmType); | |||||
value.AVItemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVItemType)); | |||||
value.StreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | |||||
value.MemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemType)); | |||||
value.FileSize = reader.ReadUInt32(); | |||||
writer.WriteNumber($"[{value.FileSize.ReadNumber()}文件大小 byte]", value.FileSize); | |||||
virtualHex = reader.ReadVirtualArray(64); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]时效口令", value.AuthorizeCode); | |||||
virtualHex = reader.ReadVirtualArray(36); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车辆进入跨域地区后5min之内任一位置", virtualHex.ToArray().ToHexString()); | |||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | |||||
switch (LogicalChannelNo) | |||||
{ | |||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
} | |||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | |||||
switch (AVResourceType) | |||||
{ | |||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
} | |||||
string StreamTypeDisplay(byte StreamType) | |||||
{ | |||||
switch (StreamType) | |||||
{ | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
string MemoryTypeDisplay(byte MemoryType) | |||||
{ | |||||
switch (MemoryType) | |||||
{ | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备存储器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
} | |||||
} | |||||
public JT809_JT1078_0x9B00_0x9B01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9B00_0x9B01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9B00_0x9B01 jT808_JT1078_0x9B00_0x9B01 = new JT809_JT1078_0x9B00_0x9B01(); | |||||
jT808_JT1078_0x9B00_0x9B01.ChannelId = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B01.StartTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9B00_0x9B01.EndTime = reader.ReadUTCDateTime(); | |||||
jT808_JT1078_0x9B00_0x9B01.AlarmType = reader.ReadUInt64(); | |||||
jT808_JT1078_0x9B00_0x9B01.AVItemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B01.StreamType = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B01.MemType = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B01.FileSize = reader.ReadUInt32(); | |||||
jT808_JT1078_0x9B00_0x9B01.AuthorizeCode = reader.ReadArray(64).ToArray(); | |||||
jT808_JT1078_0x9B00_0x9B01.GnssData = reader.ReadArray(36).ToArray(); | |||||
return jT808_JT1078_0x9B00_0x9B01; | |||||
JT809_JT1078_0x9B00_0x9B01 value = new JT809_JT1078_0x9B00_0x9B01(); | |||||
value.ChannelId = reader.ReadByte(); | |||||
value.StartTime = reader.ReadUTCDateTime(); | |||||
value.EndTime = reader.ReadUTCDateTime(); | |||||
value.AlarmType = reader.ReadUInt64(); | |||||
value.AVItemType = reader.ReadByte(); | |||||
value.StreamType = reader.ReadByte(); | |||||
value.MemType = reader.ReadByte(); | |||||
value.FileSize = reader.ReadUInt32(); | |||||
value.AuthorizeCode = reader.ReadString(64); | |||||
value.GnssData = reader.ReadArray(36).ToArray(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B01 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B01 value, IJT809Config config) | ||||
@@ -86,7 +195,7 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
writer.WriteByte(value.MemType); | writer.WriteByte(value.MemType); | ||||
writer.WriteUInt32(value.FileSize); | writer.WriteUInt32(value.FileSize); | ||||
writer.WriteArray(value.AuthorizeCode); | |||||
writer.WriteStringPadRight(value.AuthorizeCode,64); | |||||
writer.WriteArray(value.GnssData); | writer.WriteArray(value.GnssData); | ||||
} | } | ||||
} | } |
@@ -1,5 +1,7 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using System.Text.Json; | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | |||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
@@ -7,12 +9,12 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载完成通知应答消息 | /// 远程录像下载完成通知应答消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9B00_0x9B02 : JT809SubBodies,IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B02> | |||||
public class JT809_JT1078_0x9B00_0x9B02 : JT809SubBodies,IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B02>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 应答结果 | /// 应答结果 | ||||
/// </summary> | /// </summary> | ||||
public byte Result { get; set; } | |||||
public JT809_JT1078_0x9B00_0x9B02_Result Result { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 对应平台文件上传消息的流水号 | /// 对应平台文件上传消息的流水号 | ||||
/// </summary> | /// </summary> | ||||
@@ -22,17 +24,26 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
public override string Description { get; } = "远程录像下载完成通知应答消息"; | public override string Description { get; } = "远程录像下载完成通知应答消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9B00_0x9B02 value = new JT809_JT1078_0x9B00_0x9B02(); | |||||
value.Result = (JT809_JT1078_0x9B00_0x9B02_Result)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString()); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.SessionId.ReadNumber()}]对应平台文件上传消息的流水号", value.SessionId); | |||||
} | |||||
public JT809_JT1078_0x9B00_0x9B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9B00_0x9B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9B00_0x9B02 jT808_JT1078_0x9B00_0x9B02 = new JT809_JT1078_0x9B00_0x9B02(); | |||||
jT808_JT1078_0x9B00_0x9B02.Result = reader.ReadByte(); | |||||
jT808_JT1078_0x9B00_0x9B02.SessionId = reader.ReadUInt16(); | |||||
return jT808_JT1078_0x9B00_0x9B02; | |||||
JT809_JT1078_0x9B00_0x9B02 value = new JT809_JT1078_0x9B00_0x9B02(); | |||||
value.Result = (JT809_JT1078_0x9B00_0x9B02_Result)reader.ReadByte(); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B02 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B02 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteByte(value.Result); | |||||
writer.WriteByte((byte)value.Result); | |||||
writer.WriteUInt16(value.SessionId); | writer.WriteUInt16(value.SessionId); | ||||
} | } | ||||
} | } |
@@ -1,16 +1,18 @@ | |||||
using JT809.Protocol.Extensions.JT1078.Enums; | using JT809.Protocol.Extensions.JT1078.Enums; | ||||
using JT809.Protocol.Formatters; | using JT809.Protocol.Formatters; | ||||
using JT809.Protocol.Interfaces; | |||||
using JT809.Protocol.MessagePack; | using JT809.Protocol.MessagePack; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using System.Text.Json; | |||||
namespace JT809.Protocol.Extensions.JT1078.MessageBody | namespace JT809.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 远程录像下载控制消息 | /// 远程录像下载控制消息 | ||||
/// </summary> | /// </summary> | ||||
public class JT809_JT1078_0x9B00_0x9B03 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B03> | |||||
public class JT809_JT1078_0x9B00_0x9B03 : JT809SubBodies, IJT809MessagePackFormatter<JT809_JT1078_0x9B00_0x9B03>, IJT809Analyze | |||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 对应平台文件上传消息的流水号 | /// 对应平台文件上传消息的流水号 | ||||
@@ -19,24 +21,33 @@ namespace JT809.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 控制类型 | /// 控制类型 | ||||
/// </summary> | /// </summary> | ||||
public byte Type { get; set; } | |||||
public JT809_JT1078_0x9B00_0x9B03_Type Type { get; set; } | |||||
public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载控制消息.ToUInt16Value(); | public override ushort SubMsgId { get; } = JT809_JT1078_SubBusinessType.远程录像下载控制消息.ToUInt16Value(); | ||||
public override string Description { get; } = "远程录像下载控制消息"; | public override string Description { get; } = "远程录像下载控制消息"; | ||||
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) | |||||
{ | |||||
JT809_JT1078_0x9B00_0x9B03 value = new JT809_JT1078_0x9B00_0x9B03(); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{ value.SessionId.ReadNumber()}]对应平台文件上传消息的流水号", value.SessionId); | |||||
value.Type = (JT809_JT1078_0x9B00_0x9B03_Type)reader.ReadByte(); | |||||
writer.WriteString($"[{((byte)value.Type).ReadNumber()}]控制类型", value.Type.ToString()); | |||||
} | |||||
public JT809_JT1078_0x9B00_0x9B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | public JT809_JT1078_0x9B00_0x9B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) | ||||
{ | { | ||||
JT809_JT1078_0x9B00_0x9B03 jT808_JT1078_0x9B00_0x9B03 = new JT809_JT1078_0x9B00_0x9B03(); | |||||
jT808_JT1078_0x9B00_0x9B03.SessionId = reader.ReadUInt16(); | |||||
jT808_JT1078_0x9B00_0x9B03.Type = reader.ReadByte(); | |||||
return jT808_JT1078_0x9B00_0x9B03; | |||||
JT809_JT1078_0x9B00_0x9B03 value = new JT809_JT1078_0x9B00_0x9B03(); | |||||
value.SessionId = reader.ReadUInt16(); | |||||
value.Type = (JT809_JT1078_0x9B00_0x9B03_Type)reader.ReadByte(); | |||||
return value; | |||||
} | } | ||||
public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B03 value, IJT809Config config) | public void Serialize(ref JT809MessagePackWriter writer, JT809_JT1078_0x9B00_0x9B03 value, IJT809Config config) | ||||
{ | { | ||||
writer.WriteUInt16(value.SessionId); | writer.WriteUInt16(value.SessionId); | ||||
writer.WriteByte(value.Type); | |||||
writer.WriteByte((byte)value.Type); | |||||
} | } | ||||
} | } | ||||
} | } |