@@ -34,8 +34,8 @@ namespace JTNE.Protocol.Benchmark | |||||
for (int i = 0; i < N; i++) | for (int i = 0; i < N; i++) | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.Success.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.uploadim.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.Success; | |||||
jTNEPackage.MsgId = JTNEMsgId.UploadIM; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | ||||
jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | ||||
@@ -13,7 +13,7 @@ namespace JTNE.Protocol.Test.Extensions | |||||
[Fact] | [Fact] | ||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage= JTNEMsgId.login.Create("123456789", JTNEAskId.CMD, new JTNE_0x01 | |||||
JTNEPackage jTNEPackage= JTNEMsgId.Login.Create("123456789", JTNEAskId.CMD, new JTNE_0x01 | |||||
{ | { | ||||
PDATime = DateTime.Parse("2019-01-22 23:55:56"), | PDATime = DateTime.Parse("2019-01-22 23:55:56"), | ||||
LoginNum = 1, | LoginNum = 1, | ||||
@@ -21,7 +21,7 @@ namespace JTNE.Protocol.Test { | |||||
JTNEHeaderPackage jTNEHeaderPackage = new JTNEHeaderPackage (); | JTNEHeaderPackage jTNEHeaderPackage = new JTNEHeaderPackage (); | ||||
jTNEHeaderPackage.VIN = "123456789"; | jTNEHeaderPackage.VIN = "123456789"; | ||||
jTNEHeaderPackage.AskId = JTNEAskId.CMD.ToByteValue (); | jTNEHeaderPackage.AskId = JTNEAskId.CMD.ToByteValue (); | ||||
jTNEHeaderPackage.MsgId = JTNEMsgId.login.ToByteValue (); | |||||
jTNEHeaderPackage.MsgId = JTNEMsgId.Login.ToByteValue (); | |||||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01 (); | JTNE_0x01 jTNE_0X01 = new JTNE_0x01 (); | ||||
jTNE_0X01.PDATime = DateTime.Parse ("2019-01-22 23:55:56"); | jTNE_0X01.PDATime = DateTime.Parse ("2019-01-22 23:55:56"); | ||||
jTNE_0X01.LoginNum = 1; | jTNE_0X01.LoginNum = 1; | ||||
@@ -42,7 +42,7 @@ namespace JTNE.Protocol.Test { | |||||
var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes (); | var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes (); | ||||
JTNEHeaderPackage jTNEHeaderPackage = JTNESerializer.Deserialize<JTNEHeaderPackage> (data); | JTNEHeaderPackage jTNEHeaderPackage = JTNESerializer.Deserialize<JTNEHeaderPackage> (data); | ||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), jTNEHeaderPackage.AskId); | Assert.Equal (JTNEAskId.CMD.ToByteValue (), jTNEHeaderPackage.AskId); | ||||
Assert.Equal (JTNEMsgId.login.ToByteValue (), jTNEHeaderPackage.MsgId); | |||||
Assert.Equal (JTNEMsgId.Login.ToByteValue (), jTNEHeaderPackage.MsgId); | |||||
Assert.Equal ("123456789", jTNEHeaderPackage.VIN); | Assert.Equal ("123456789", jTNEHeaderPackage.VIN); | ||||
JTNE_0x01 jTNE_0X01 = JTNESerializer.Deserialize<JTNE_0x01> (jTNEHeaderPackage.Bodies); | JTNE_0x01 jTNE_0X01 = JTNESerializer.Deserialize<JTNE_0x01> (jTNEHeaderPackage.Bodies); | ||||
Assert.Equal (DateTime.Parse ("2019-01-22 23:55:56"), jTNE_0X01.PDATime); | Assert.Equal (DateTime.Parse ("2019-01-22 23:55:56"), jTNE_0X01.PDATime); | ||||
@@ -60,8 +60,8 @@ namespace JTNE.Protocol.Test { | |||||
JTNEGlobalConfigs.Instance.Encoding = Encoding.GetEncoding ("GB18030"); | JTNEGlobalConfigs.Instance.Encoding = Encoding.GetEncoding ("GB18030"); | ||||
var data = "23 23 05 FE 30 30 30 30 30 30 30 30 30 30 30 30 30 32 31 31 31 01 00 29 14 07 14 13 26 22 00 01 CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB B3 B5 C1 AA CD F2 01 02 01 A1".ToHexBytes (); | var data = "23 23 05 FE 30 30 30 30 30 30 30 30 30 30 30 30 30 32 31 31 31 01 00 29 14 07 14 13 26 22 00 01 CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB B3 B5 C1 AA CD F2 01 02 01 A1".ToHexBytes (); | ||||
var package = JTNESerializer.Deserialize (data); | var package = JTNESerializer.Deserialize (data); | ||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), package.AskId); | |||||
Assert.Equal (JTNEMsgId.platformlogin.ToByteValue (), package.MsgId); | |||||
Assert.Equal (JTNEAskId.CMD, package.AskId); | |||||
Assert.Equal (JTNEMsgId.PlatformLogin, package.MsgId); | |||||
Assert.Equal (41, package.DataUnitLength); | Assert.Equal (41, package.DataUnitLength); | ||||
Assert.NotNull (package.Bodies); | Assert.NotNull (package.Bodies); | ||||
@@ -75,5 +75,29 @@ namespace JTNE.Protocol.Test { | |||||
Assert.Equal (JTNEEncryptMethod.None, loginbody.EncryptMethod); | Assert.Equal (JTNEEncryptMethod.None, loginbody.EncryptMethod); | ||||
} | } | ||||
[Fact] | |||||
public void TestGenerateReply(){ | |||||
JTNEGlobalConfigs.Instance.Encoding = Encoding.GetEncoding ("GB18030"); | |||||
var data = "23 23 05 FE 30 30 30 30 30 30 30 30 30 30 30 30 30 32 31 31 31 01 00 29 14 07 14 13 26 22 00 01 CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB CD FE BA A3 B9 E3 CC A9 BF D5 B8 DB B3 B5 C1 AA CD F2 01 02 01 A1".ToHexBytes (); | |||||
var package = JTNESerializer.Deserialize (data); | |||||
var reply = package.GenerateReply(JTNEAskId.Success); | |||||
Assert.NotNull(reply); | |||||
var bytes = JTNESerializer.Serialize(reply); | |||||
output.WriteLine(bytes.ToHexString()); | |||||
} | |||||
} | |||||
public static class JTNEReplyExtensions{ | |||||
public static JTNEPackage GenerateReply(this JTNEPackage source,JTNEAskId askId){ | |||||
return new JTNEPackage(){ | |||||
MsgId = source.MsgId, | |||||
AskId = askId, | |||||
VIN = source.VIN, | |||||
DataUnitLength = 0 | |||||
}; | |||||
} | |||||
} | } | ||||
} | } |
@@ -15,8 +15,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.login.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.Login; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | ||||
jTNE_0X01.PDATime = DateTime.Parse("2019-01-22 23:55:56"); | jTNE_0X01.PDATime = DateTime.Parse("2019-01-22 23:55:56"); | ||||
@@ -39,8 +39,8 @@ namespace JTNE.Protocol.Test.Package | |||||
{ | { | ||||
var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes(); | var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.login.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.Login, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
JTNE_0x01 jTNE_0X01 = jTNEPackage.Bodies as JTNE_0x01; | JTNE_0x01 jTNE_0X01 = jTNEPackage.Bodies as JTNE_0x01; | ||||
@@ -68,8 +68,8 @@ namespace JTNE.Protocol.Test.Package | |||||
} | } | ||||
}); | }); | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.login.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.Login; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
jTNEPackage.EncryptMethod = JTNEEncryptMethod.AES128; | jTNEPackage.EncryptMethod = JTNEEncryptMethod.AES128; | ||||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | ||||
@@ -103,8 +103,8 @@ namespace JTNE.Protocol.Test.Package | |||||
}); | }); | ||||
var data = "232301FE31323334353637383900000000000000000300307C9AAF67FB9408A75FAFC1C87F1E2AECD79DDAB8219016A5DD0911283922805EF450045EA3611C0D5CFBFD8F2581CEED30".ToHexBytes(); | var data = "232301FE31323334353637383900000000000000000300307C9AAF67FB9408A75FAFC1C87F1E2AECD79DDAB8219016A5DD0911283922805EF450045EA3611C0D5CFBFD8F2581CEED30".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.login.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.Login, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
Assert.Equal(JTNEEncryptMethod.AES128, jTNEPackage.EncryptMethod); | Assert.Equal(JTNEEncryptMethod.AES128, jTNEPackage.EncryptMethod); | ||||
@@ -15,8 +15,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.Success.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.uploadim.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.Success; | |||||
jTNEPackage.MsgId = JTNEMsgId.UploadIM; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | ||||
jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | ||||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.loginout.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.Logout; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x04 jTNE_0X04 = new JTNE_0x04(); | JTNE_0x04 jTNE_0X04 = new JTNE_0x04(); | ||||
jTNE_0X04.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | jTNE_0X04.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | ||||
@@ -30,8 +30,8 @@ namespace JTNE.Protocol.Test.Package | |||||
{ | { | ||||
var data = "232304FE31323334353637383900000000000000000100081301171737380001DE".ToHexBytes(); | var data = "232304FE31323334353637383900000000000000000100081301171737380001DE".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.loginout.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.Logout, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
JTNE_0x04 jTNE_0X04 = jTNEPackage.Bodies as JTNE_0x04; | JTNE_0x04 jTNE_0X04 = jTNEPackage.Bodies as JTNE_0x04; | ||||
Assert.Equal(DateTime.Parse("2019-01-23 23:55:56"), jTNE_0X04.LogoutTime); | Assert.Equal(DateTime.Parse("2019-01-23 23:55:56"), jTNE_0X04.LogoutTime); | ||||
@@ -11,8 +11,8 @@ namespace JTNE.Protocol.Test.Package { | |||||
[Fact] | [Fact] | ||||
public void Test1 () { | public void Test1 () { | ||||
JTNEPackage jTNEPackage = new JTNEPackage (); | JTNEPackage jTNEPackage = new JTNEPackage (); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue (); | |||||
jTNEPackage.MsgId = JTNEMsgId.platformlogin.ToByteValue (); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.PlatformLogin; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x05 jTNE_0X05 = new JTNE_0x05 (); | JTNE_0x05 jTNE_0X05 = new JTNE_0x05 (); | ||||
jTNE_0X05.LoginTime = DateTime.Parse ("2019-01-23 23:55:56"); | jTNE_0X05.LoginTime = DateTime.Parse ("2019-01-23 23:55:56"); | ||||
@@ -28,8 +28,8 @@ namespace JTNE.Protocol.Test.Package { | |||||
public void Test2 () { | public void Test2 () { | ||||
var data = "232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF".ToHexBytes (); | var data = "232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF".ToHexBytes (); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize (data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize (data); | ||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), jTNEPackage.AskId); | |||||
Assert.Equal (JTNEMsgId.platformlogin.ToByteValue (), jTNEPackage.MsgId); | |||||
Assert.Equal (JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal (JTNEMsgId.PlatformLogin, jTNEPackage.MsgId); | |||||
Assert.Equal ("123456789", jTNEPackage.VIN); | Assert.Equal ("123456789", jTNEPackage.VIN); | ||||
JTNE_0x05 jTNE_0X05 = jTNEPackage.Bodies as JTNE_0x05; | JTNE_0x05 jTNE_0X05 = jTNEPackage.Bodies as JTNE_0x05; | ||||
Assert.Equal (DateTime.Parse ("2019-01-23 23:55:56"), jTNE_0X05.LoginTime); | Assert.Equal (DateTime.Parse ("2019-01-23 23:55:56"), jTNE_0X05.LoginTime); | ||||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.platformlogout.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.PlatformLogout; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x06 jTNE_0X06 = new JTNE_0x06(); | JTNE_0x06 jTNE_0X06 = new JTNE_0x06(); | ||||
jTNE_0X06.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | jTNE_0X06.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | ||||
@@ -30,8 +30,8 @@ namespace JTNE.Protocol.Test.Package | |||||
{ | { | ||||
var data = "232306FE31323334353637383900000000000000000100081301171737380001DC".ToHexBytes(); | var data = "232306FE31323334353637383900000000000000000100081301171737380001DC".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.platformlogout.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.PlatformLogout, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
JTNE_0x06 jTNE_0X06 = jTNEPackage.Bodies as JTNE_0x06; | JTNE_0x06 jTNE_0X06 = jTNEPackage.Bodies as JTNE_0x06; | ||||
Assert.Equal(DateTime.Parse("2019-01-23 23:55:56"), jTNE_0X06.LogoutTime); | Assert.Equal(DateTime.Parse("2019-01-23 23:55:56"), jTNE_0X06.LogoutTime); | ||||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.heartbeat.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.HeartBeat; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | ||||
Assert.Equal("232307FE3132333435363738390000000000000000010000C9", hex); | Assert.Equal("232307FE3132333435363738390000000000000000010000C9", hex); | ||||
@@ -26,8 +26,8 @@ namespace JTNE.Protocol.Test.Package | |||||
{ | { | ||||
var data = "232307FE3132333435363738390000000000000000010000C9".ToHexBytes(); | var data = "232307FE3132333435363738390000000000000000010000C9".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.heartbeat.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.HeartBeat, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
Assert.Null(jTNEPackage.Bodies); | Assert.Null(jTNEPackage.Bodies); | ||||
} | } | ||||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | JTNEPackage jTNEPackage = new JTNEPackage(); | ||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.checktime.ToByteValue(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD; | |||||
jTNEPackage.MsgId = JTNEMsgId.CheckTime; | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | ||||
Assert.Equal("232308FE3132333435363738390000000000000000010000C6", hex); | Assert.Equal("232308FE3132333435363738390000000000000000010000C6", hex); | ||||
@@ -26,8 +26,8 @@ namespace JTNE.Protocol.Test.Package | |||||
{ | { | ||||
var data = "232308FE3132333435363738390000000000000000010000C6".ToHexBytes(); | var data = "232308FE3132333435363738390000000000000000010000C6".ToHexBytes(); | ||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | ||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.checktime.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal(JTNEAskId.CMD, jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.CheckTime, jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
Assert.Null(jTNEPackage.Bodies); | Assert.Null(jTNEPackage.Bodies); | ||||
} | } | ||||
@@ -1,29 +1,23 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JTNE.Protocol.Enums | |||||
{ | |||||
namespace JTNE.Protocol.Enums { | |||||
/// <summary> | /// <summary> | ||||
/// 应答标志 | /// 应答标志 | ||||
/// </summary> | /// </summary> | ||||
public enum JTNEAskId:byte | |||||
{ | |||||
public enum JTNEAskId : byte { | |||||
/// <summary> | /// <summary> | ||||
/// 接收到的信息正确 | /// 接收到的信息正确 | ||||
/// </summary> | /// </summary> | ||||
Success=0x01, | |||||
Success = 0x01, | |||||
/// <summary> | /// <summary> | ||||
/// 设置未成功 | /// 设置未成功 | ||||
/// </summary> | /// </summary> | ||||
Error=0x02, | |||||
Error = 0x02, | |||||
/// <summary> | /// <summary> | ||||
/// VIN重复错误 | /// VIN重复错误 | ||||
/// </summary> | /// </summary> | ||||
VinRepeatError=0x03, | |||||
VinRepeatError = 0x03, | |||||
/// <summary> | /// <summary> | ||||
/// 数据包为命令包,而非应答包 | /// 数据包为命令包,而非应答包 | ||||
/// </summary> | /// </summary> | ||||
CMD=0xFE | |||||
CMD = 0xFE | |||||
} | } | ||||
} | |||||
} |
@@ -1,66 +1,64 @@ | |||||
using JTNE.Protocol.Attributes; | |||||
using JTNE.Protocol.MessageBody; | |||||
using System; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using JTNE.Protocol.Attributes; | |||||
using JTNE.Protocol.MessageBody; | |||||
namespace JTNE.Protocol.Enums | |||||
{ | |||||
namespace JTNE.Protocol.Enums { | |||||
/// <summary> | /// <summary> | ||||
/// 命令单元 | /// 命令单元 | ||||
/// </summary> | /// </summary> | ||||
public enum JTNEMsgId:byte | |||||
{ | |||||
public enum JTNEMsgId : byte { | |||||
/// <summary> | /// <summary> | ||||
/// 车辆登入 | /// 车辆登入 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x01))] | |||||
login = 0x01, | |||||
[JTNEBodiesType (typeof (JTNE_0x01))] | |||||
Login = 0x01, | |||||
/// <summary> | /// <summary> | ||||
/// 实时信息上传 | /// 实时信息上传 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x02))] | |||||
uploadim = 0x02, | |||||
[JTNEBodiesType (typeof (JTNE_0x02))] | |||||
UploadIM = 0x02, | |||||
/// <summary> | /// <summary> | ||||
/// 补传信息上传 | /// 补传信息上传 | ||||
/// </summary> | /// </summary> | ||||
uploadsup = 0x03, | |||||
UploadSup = 0x03, | |||||
/// <summary> | /// <summary> | ||||
/// 车辆登出 | /// 车辆登出 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x04))] | |||||
loginout = 0x04, | |||||
[JTNEBodiesType (typeof (JTNE_0x04))] | |||||
Logout = 0x04, | |||||
/// <summary> | /// <summary> | ||||
/// 平台登入 | /// 平台登入 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x05))] | |||||
platformlogin = 0x05, | |||||
[JTNEBodiesType (typeof (JTNE_0x05))] | |||||
PlatformLogin = 0x05, | |||||
/// <summary> | /// <summary> | ||||
/// 平台登出 | /// 平台登出 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x06))] | |||||
platformlogout = 0x06, | |||||
[JTNEBodiesType (typeof (JTNE_0x06))] | |||||
PlatformLogout = 0x06, | |||||
/// <summary> | /// <summary> | ||||
/// 心跳 | |||||
/// 心跳包 | |||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x07))] | |||||
heartbeat = 0x07, | |||||
[JTNEBodiesType (typeof (JTNE_0x07))] | |||||
HeartBeat = 0x07, | |||||
/// <summary> | /// <summary> | ||||
/// 终端校时 | /// 终端校时 | ||||
/// </summary> | /// </summary> | ||||
[JTNEBodiesType(typeof(JTNE_0x08))] | |||||
checktime = 0x08, | |||||
[JTNEBodiesType (typeof (JTNE_0x08))] | |||||
CheckTime = 0x08, | |||||
/// <summary> | /// <summary> | ||||
/// 查询命令 | /// 查询命令 | ||||
/// </summary> | /// </summary> | ||||
query = 0x80, | |||||
Query = 0x80, | |||||
/// <summary> | /// <summary> | ||||
/// 设置命令 | /// 设置命令 | ||||
/// </summary> | /// </summary> | ||||
settings = 0x81, | |||||
Settings = 0x81, | |||||
/// <summary> | /// <summary> | ||||
/// 控制命令 | /// 控制命令 | ||||
/// </summary> | /// </summary> | ||||
control = 0x82 | |||||
Control = 0x82 | |||||
} | } | ||||
} | |||||
} |
@@ -4,22 +4,19 @@ using System.ComponentModel; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Reflection; | using System.Reflection; | ||||
namespace JTNE.Protocol.Extensions | |||||
{ | |||||
namespace JTNE.Protocol.Extensions { | |||||
/// <summary> | /// <summary> | ||||
/// 枚举扩展 | /// 枚举扩展 | ||||
/// </summary> | /// </summary> | ||||
public static class JT808EnumExtensions | |||||
{ | |||||
public static class JT808EnumExtensions { | |||||
/// <summary> | /// <summary> | ||||
/// 转为整型 | /// 转为整型 | ||||
/// </summary> | /// </summary> | ||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="t"></param> | /// <param name="t"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static int ToValue<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToInt32(t); | |||||
public static int ToValue<T> (this T t) where T : struct { | |||||
return Convert.ToInt32 (t); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -28,9 +25,8 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="t"></param> | /// <param name="t"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static ushort ToUInt16Value<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToUInt16(t); | |||||
public static ushort ToUInt16Value<T> (this T t) where T : struct { | |||||
return Convert.ToUInt16 (t); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -39,9 +35,8 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="t"></param> | /// <param name="t"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static byte ToByteValue<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToByte(t); | |||||
public static byte ToByteValue<T> (this T t) where T : struct { | |||||
return Convert.ToByte (t); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -50,9 +45,8 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="t"></param> | /// <param name="t"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static string ToValueString<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToInt32(t).ToString(); | |||||
public static string ToValueString<T> (this T t) where T : struct { | |||||
return Convert.ToInt32 (t).ToString (); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -61,18 +55,16 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="value"></param> | /// <param name="value"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static T ToEnum<T>(this string value) where T : struct | |||||
{ | |||||
return (T)Enum.Parse(typeof(T), value); | |||||
public static T ToEnum<T> (this string value) where T : struct { | |||||
return (T) Enum.Parse (typeof (T), value); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取枚举字符串 | /// 获取枚举字符串 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="valueEnum"></param> | /// <param name="valueEnum"></param> | ||||
public static string GetName(this Enum valueEnum) | |||||
{ | |||||
return valueEnum.ToString(); | |||||
public static string GetName (this Enum valueEnum) { | |||||
return valueEnum.ToString (); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -80,10 +72,9 @@ namespace JTNE.Protocol.Extensions | |||||
/// </summary> | /// </summary> | ||||
/// <param name="value"></param> | /// <param name="value"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static string GetDescription(this Enum value) | |||||
{ | |||||
var attribute = value.GetAttribute<DescriptionAttribute>(); | |||||
return attribute == null ? value.ToString() : attribute.Description; | |||||
public static string GetDescription (this Enum value) { | |||||
var attribute = value.GetAttribute<DescriptionAttribute> (); | |||||
return attribute == null ? value.ToString () : attribute.Description; | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -92,24 +83,21 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="TEnum"></typeparam> | /// <typeparam name="TEnum"></typeparam> | ||||
/// <param name="enumValue"></param> | /// <param name="enumValue"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static bool IsEnumValid<TEnum>(this int enumValue) | |||||
{ | |||||
return Enum.IsDefined(typeof(TEnum), enumValue); | |||||
public static bool IsEnumValid<TEnum> (this int enumValue) { | |||||
return Enum.IsDefined (typeof (TEnum), enumValue); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取DescriptionAttribute特性枚举及描述 | /// 获取DescriptionAttribute特性枚举及描述 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="type"></param> | |||||
/// <param name="value"></param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public static Dictionary<string, string> GetDescriptionAttributeDictionary(this Enum value) | |||||
{ | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string>(); | |||||
var fields = value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) | |||||
{ | |||||
DescriptionAttribute attr = Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute), false) as DescriptionAttribute; | |||||
dictionary.Add(fi.Name, attr != null ? attr.Description : ""); | |||||
public static Dictionary<string, string> GetDescriptionAttributeDictionary (this Enum value) { | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string> (); | |||||
var fields = value.GetType ().GetFields (BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) { | |||||
DescriptionAttribute attr = Attribute.GetCustomAttribute (fi, typeof (DescriptionAttribute), false) as DescriptionAttribute; | |||||
dictionary.Add (fi.Name, attr != null ? attr.Description : ""); | |||||
} | } | ||||
return dictionary; | return dictionary; | ||||
} | } | ||||
@@ -117,27 +105,24 @@ namespace JTNE.Protocol.Extensions | |||||
/// <summary> | /// <summary> | ||||
/// 获取DisplayNameAttribute特性枚举值的描述 | /// 获取DisplayNameAttribute特性枚举值的描述 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="obj">枚举值</param> | |||||
/// <param name="value">枚举值</param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public static string GetDisplayName(this Enum value) | |||||
{ | |||||
var attribute = value.GetAttribute<DisplayNameAttribute>(); | |||||
return attribute == null ? value.ToString() : attribute.DisplayName; | |||||
public static string GetDisplayName (this Enum value) { | |||||
var attribute = value.GetAttribute<DisplayNameAttribute> (); | |||||
return attribute == null ? value.ToString () : attribute.DisplayName; | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 获取DisplayNameAttribute特性枚举及描述 | /// 获取DisplayNameAttribute特性枚举及描述 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="type"></param> | |||||
/// <param name="value"></param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public static Dictionary<string, string> GetDisplayNameAttributeDictionary(this Enum value) | |||||
{ | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string>(); | |||||
var fields = value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) | |||||
{ | |||||
DisplayNameAttribute attr = Attribute.GetCustomAttribute(fi, typeof(DisplayNameAttribute), false) as DisplayNameAttribute; | |||||
dictionary.Add(fi.Name, attr != null ? attr.DisplayName : ""); | |||||
public static Dictionary<string, string> GetDisplayNameAttributeDictionary (this Enum value) { | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string> (); | |||||
var fields = value.GetType ().GetFields (BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) { | |||||
DisplayNameAttribute attr = Attribute.GetCustomAttribute (fi, typeof (DisplayNameAttribute), false) as DisplayNameAttribute; | |||||
dictionary.Add (fi.Name, attr != null ? attr.DisplayName : ""); | |||||
} | } | ||||
return dictionary; | return dictionary; | ||||
} | } | ||||
@@ -148,17 +133,13 @@ namespace JTNE.Protocol.Extensions | |||||
/// <typeparam name="T"></typeparam> | /// <typeparam name="T"></typeparam> | ||||
/// <param name="value"></param> | /// <param name="value"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static T GetAttribute<T>(this Enum value) where T : Attribute | |||||
{ | |||||
try | |||||
{ | |||||
var type = value.GetType(); | |||||
var memberInfo = type.GetMember(value.ToString()); | |||||
var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false); | |||||
return (T)attributes[0]; | |||||
} | |||||
catch | |||||
{ | |||||
public static T GetAttribute<T> (this Enum value) where T : Attribute { | |||||
try { | |||||
var type = value.GetType (); | |||||
var memberInfo = type.GetMember (value.ToString ()); | |||||
var attributes = memberInfo[0].GetCustomAttributes (typeof (T), false); | |||||
return (T) attributes[0]; | |||||
} catch { | |||||
return default; | return default; | ||||
} | } | ||||
} | } | ||||
@@ -171,37 +152,29 @@ namespace JTNE.Protocol.Extensions | |||||
/// <param name="digit">位数(8,16,32)</param> | /// <param name="digit">位数(8,16,32)</param> | ||||
/// <param name="ignoreUnknown">是否忽略未知数据</param> | /// <param name="ignoreUnknown">是否忽略未知数据</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static IEnumerable<T> GetEnumTypes<T>(this int value, int digit, bool ignoreUnknown=false) where T : Enum | |||||
{ | |||||
List<T> values = new List<T>(); | |||||
for (int i = 0; i < digit; i++) | |||||
{ | |||||
if (Math.Pow(2, i) <= value) continue; | |||||
values.Add((T)Enum.ToObject(typeof(T), (int)Math.Pow(2, i - 1))); | |||||
value = value - (int)Math.Pow(2, i - 1); | |||||
public static IEnumerable<T> GetEnumTypes<T> (this int value, int digit, bool ignoreUnknown = false) where T : Enum { | |||||
List<T> values = new List<T> (); | |||||
for (int i = 0; i < digit; i++) { | |||||
if (Math.Pow (2, i) <= value) continue; | |||||
values.Add ((T) Enum.ToObject (typeof (T), (int) Math.Pow (2, i - 1))); | |||||
value = value - (int) Math.Pow (2, i - 1); | |||||
i = 0; | i = 0; | ||||
if (value <= 0) break; | if (value <= 0) break; | ||||
} | } | ||||
if (ignoreUnknown) | |||||
{ | |||||
List<T> results = new List<T>(); | |||||
foreach (var item in values) | |||||
{ | |||||
foreach (string itemChild in Enum.GetNames(typeof(T))) | |||||
{ | |||||
if (item.ToString() == itemChild) | |||||
{ | |||||
results.Add(item); | |||||
if (ignoreUnknown) { | |||||
List<T> results = new List<T> (); | |||||
foreach (var item in values) { | |||||
foreach (string itemChild in Enum.GetNames (typeof (T))) { | |||||
if (item.ToString () == itemChild) { | |||||
results.Add (item); | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
return results; | return results; | ||||
} | |||||
else | |||||
{ | |||||
} else { | |||||
return values; | return values; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -1,15 +1,13 @@ | |||||
using JTNE.Protocol.Enums; | |||||
using System; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using JTNE.Protocol.Enums; | |||||
namespace JTNE.Protocol.Extensions | |||||
{ | |||||
namespace JTNE.Protocol.Extensions { | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
public static class JTNEPackageExtensions | |||||
{ | |||||
public static class JTNEPackageExtensions { | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
@@ -19,12 +17,11 @@ namespace JTNE.Protocol.Extensions | |||||
/// <param name="vin"></param> | /// <param name="vin"></param> | ||||
/// <param name="bodies"></param> | /// <param name="bodies"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static JTNEPackage Create<TJTNEBodies>(this JTNEMsgId msgId,string vin, JTNEAskId askId, TJTNEBodies bodies) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
jTNEPackage.AskId = askId.ToByteValue(); | |||||
jTNEPackage.MsgId = msgId.ToByteValue(); | |||||
public static JTNEPackage Create<TJTNEBodies> (this JTNEMsgId msgId, string vin, JTNEAskId askId, TJTNEBodies bodies) | |||||
where TJTNEBodies : JTNEBodies { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
jTNEPackage.AskId = askId; | |||||
jTNEPackage.MsgId = msgId; | |||||
jTNEPackage.Bodies = bodies; | jTNEPackage.Bodies = bodies; | ||||
jTNEPackage.VIN = vin; | jTNEPackage.VIN = vin; | ||||
return jTNEPackage; | return jTNEPackage; | ||||
@@ -37,11 +34,10 @@ namespace JTNE.Protocol.Extensions | |||||
/// <param name="vin"></param> | /// <param name="vin"></param> | ||||
/// <param name="askId"></param> | /// <param name="askId"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static JTNEPackage Create(this JTNEMsgId msgId, string vin, JTNEAskId askId) | |||||
{ | |||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
jTNEPackage.AskId = askId.ToByteValue(); | |||||
jTNEPackage.MsgId = msgId.ToByteValue(); | |||||
public static JTNEPackage Create (this JTNEMsgId msgId, string vin, JTNEAskId askId) { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
jTNEPackage.AskId = askId; | |||||
jTNEPackage.MsgId = msgId; | |||||
jTNEPackage.VIN = vin; | jTNEPackage.VIN = vin; | ||||
return jTNEPackage; | return jTNEPackage; | ||||
} | } | ||||
@@ -55,12 +51,11 @@ namespace JTNE.Protocol.Extensions | |||||
/// <param name="askId"></param> | /// <param name="askId"></param> | ||||
/// <param name="bodies"></param> | /// <param name="bodies"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static JTNEPackage CreateCustomMsgId<TJTNEBodies>(this byte msgId, string vin, JTNEAskId askId, TJTNEBodies bodies) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
jTNEPackage.AskId = askId.ToByteValue(); | |||||
jTNEPackage.MsgId = msgId; | |||||
public static JTNEPackage CreateCustomMsgId<TJTNEBodies> (this byte msgId, string vin, JTNEAskId askId, TJTNEBodies bodies) | |||||
where TJTNEBodies : JTNEBodies { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
jTNEPackage.AskId = askId; | |||||
jTNEPackage.MsgId = (JTNEMsgId) msgId; | |||||
jTNEPackage.Bodies = bodies; | jTNEPackage.Bodies = bodies; | ||||
jTNEPackage.VIN = vin; | jTNEPackage.VIN = vin; | ||||
return jTNEPackage; | return jTNEPackage; | ||||
@@ -73,13 +68,12 @@ namespace JTNE.Protocol.Extensions | |||||
/// <param name="askId"></param> | /// <param name="askId"></param> | ||||
/// <param name="vin"></param> | /// <param name="vin"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public static JTNEPackage CreateCustomMsgId(this byte msgId, string vin, JTNEAskId askId) | |||||
{ | |||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
jTNEPackage.AskId = askId.ToByteValue(); | |||||
jTNEPackage.MsgId = msgId; | |||||
public static JTNEPackage CreateCustomMsgId (this byte msgId, string vin, JTNEAskId askId) { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
jTNEPackage.AskId = askId; | |||||
jTNEPackage.MsgId = (JTNEMsgId) msgId; | |||||
jTNEPackage.VIN = vin; | jTNEPackage.VIN = vin; | ||||
return jTNEPackage; | return jTNEPackage; | ||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -26,9 +26,9 @@ namespace JTNE.Protocol.Formatters { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | JTNEPackage jTNEPackage = new JTNEPackage (); | ||||
offset += 2; | offset += 2; | ||||
// 3.命令标识 | // 3.命令标识 | ||||
jTNEPackage.MsgId = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
jTNEPackage.MsgId = (JTNEMsgId)JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
// 4.应答标识 | // 4.应答标识 | ||||
jTNEPackage.AskId = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
jTNEPackage.AskId = (JTNEAskId)JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
// 5.VIN | // 5.VIN | ||||
jTNEPackage.VIN = JTNEBinaryExtensions.ReadStringLittle (bytes, ref offset, 17); | jTNEPackage.VIN = JTNEBinaryExtensions.ReadStringLittle (bytes, ref offset, 17); | ||||
// 6.数据加密方式 | // 6.数据加密方式 | ||||
@@ -39,7 +39,7 @@ namespace JTNE.Protocol.Formatters { | |||||
// 8.1.根据数据加密方式进行解码 | // 8.1.根据数据加密方式进行解码 | ||||
// 8.2.解析出对应数据体 | // 8.2.解析出对应数据体 | ||||
if (jTNEPackage.DataUnitLength > 0) { | if (jTNEPackage.DataUnitLength > 0) { | ||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (jTNEPackage.MsgId); | |||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId ((byte)jTNEPackage.MsgId); | |||||
if (jTNEBodiesImplType != null) { | if (jTNEBodiesImplType != null) { | ||||
int bodyReadSize = 0; | int bodyReadSize = 0; | ||||
try { | try { | ||||
@@ -76,9 +76,9 @@ namespace JTNE.Protocol.Formatters { | |||||
// 2.起始符2 | // 2.起始符2 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.BeginFlag2); | offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.BeginFlag2); | ||||
// 3.命令标识 | // 3.命令标识 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.MsgId); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, (byte)value.MsgId); | |||||
// 4.应答标识 | // 4.应答标识 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.AskId); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, (byte)value.AskId); | |||||
// 5.VIN | // 5.VIN | ||||
offset += JTNEBinaryExtensions.WriteStringPadRightLittle (bytes, offset, value.VIN, 17); | offset += JTNEBinaryExtensions.WriteStringPadRightLittle (bytes, offset, value.VIN, 17); | ||||
// 6.数据加密方式 | // 6.数据加密方式 | ||||
@@ -86,7 +86,7 @@ namespace JTNE.Protocol.Formatters { | |||||
// 7.记录当前偏移量 | // 7.记录当前偏移量 | ||||
int tmpOffset = offset; | int tmpOffset = offset; | ||||
// 8.数据体 | // 8.数据体 | ||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (value.MsgId); | |||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId ((byte)value.MsgId); | |||||
int messageBodyOffset = 0; | int messageBodyOffset = 0; | ||||
if (jTNEBodiesImplType != null) { | if (jTNEBodiesImplType != null) { | ||||
if (value.Bodies != null) { | if (value.Bodies != null) { | ||||
@@ -1,48 +1,39 @@ | |||||
using JTNE.Protocol.Attributes; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Extensions; | |||||
using System; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using JTNE.Protocol.Attributes; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Extensions; | |||||
namespace JTNE.Protocol.Internal | |||||
{ | |||||
internal static class JTNEMsgIdFactory | |||||
{ | |||||
private static readonly Dictionary<byte, Type> map; | |||||
namespace JTNE.Protocol.Internal { | |||||
internal static class JTNEMsgIdFactory { | |||||
private static readonly Dictionary<byte, Type> map = new Dictionary<byte, Type> (); | |||||
static JTNEMsgIdFactory() | |||||
{ | |||||
map = new Dictionary<byte, Type>(); | |||||
InitMap(); | |||||
static JTNEMsgIdFactory () { | |||||
InitMap (); | |||||
} | } | ||||
internal static Type GetBodiesImplTypeByMsgId(byte msgId) =>map.TryGetValue(msgId, out Type type) ? type : null; | |||||
internal static Type GetBodiesImplTypeByMsgId (byte msgId) => map.TryGetValue (msgId, out Type type) ? type : null; | |||||
private static void InitMap() | |||||
{ | |||||
foreach(var item in Enum.GetNames(typeof(JTNEMsgId))) | |||||
{ | |||||
JTNEMsgId msgId = item.ToEnum<JTNEMsgId>(); | |||||
JTNEBodiesTypeAttribute jT808BodiesTypeAttribute = msgId.GetAttribute<JTNEBodiesTypeAttribute>(); | |||||
map.Add((byte)msgId, jT808BodiesTypeAttribute?.JT808BodiesType); | |||||
} | |||||
private static void InitMap () { | |||||
foreach (JTNEMsgId msgId in Enum.GetValues (typeof (JTNEMsgId))) { | |||||
JTNEBodiesTypeAttribute jT808BodiesTypeAttribute = msgId.GetAttribute<JTNEBodiesTypeAttribute> (); | |||||
map.Add ((byte) msgId, jT808BodiesTypeAttribute?.JT808BodiesType); | |||||
} | |||||
} | } | ||||
internal static void SetMap<TJTNEBodies>(byte msgId) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
if(!map.ContainsKey(msgId)) | |||||
map.Add(msgId, typeof(TJTNEBodies)); | |||||
internal static void SetMap<TJTNEBodies> (byte msgId) | |||||
where TJTNEBodies : JTNEBodies { | |||||
if (!map.ContainsKey (msgId)) | |||||
map.Add (msgId, typeof (TJTNEBodies)); | |||||
} | } | ||||
internal static void ReplaceMap<TJTNEBodies>(byte msgId) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
if (!map.ContainsKey(msgId)) | |||||
map.Add(msgId, typeof(TJTNEBodies)); | |||||
internal static void ReplaceMap<TJTNEBodies> (byte msgId) | |||||
where TJTNEBodies : JTNEBodies { | |||||
if (!map.ContainsKey (msgId)) | |||||
map.Add (msgId, typeof (TJTNEBodies)); | |||||
else | else | ||||
map[msgId] = typeof(TJTNEBodies); | |||||
map[msgId] = typeof (TJTNEBodies); | |||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -21,9 +21,9 @@ namespace JTNE.Protocol { | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 字符串编码,默认 GB18030 | |||||
/// 字符串编码 | |||||
/// </summary> | /// </summary> | ||||
public Encoding Encoding { get; set;} | |||||
public Encoding Encoding { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
@@ -41,35 +41,40 @@ namespace JTNE.Protocol { | |||||
/// 平台流水号 | /// 平台流水号 | ||||
/// </summary> | /// </summary> | ||||
public IPlatformMsgSNDistributed PlatformMsgSNDistributed { get; private set; } | public IPlatformMsgSNDistributed PlatformMsgSNDistributed { get; private set; } | ||||
/// <summary> | /// <summary> | ||||
/// 跳过校验码 | /// 跳过校验码 | ||||
/// 测试的时候需要手动修改值,避免验证 | /// 测试的时候需要手动修改值,避免验证 | ||||
/// 默认:false | /// 默认:false | ||||
/// </summary> | /// </summary> | ||||
public bool SkipCRCCode { get; private set; } | public bool SkipCRCCode { get; private set; } | ||||
/// <summary> | /// <summary> | ||||
/// 消息数据体加密算法 | /// 消息数据体加密算法 | ||||
/// RSA=>IJTNEEncryptImpl | /// RSA=>IJTNEEncryptImpl | ||||
/// AES=>IJTNEEncryptImpl | /// AES=>IJTNEEncryptImpl | ||||
/// </summary> | /// </summary> | ||||
public Func<JTNEEncryptMethod, IJTNEEncrypt> DataBodiesEncrypt { get; private set; } | public Func<JTNEEncryptMethod, IJTNEEncrypt> DataBodiesEncrypt { get; private set; } | ||||
/// <summary> | /// <summary> | ||||
/// 平台登入加密算法 | /// 平台登入加密算法 | ||||
/// RSA=>IJTNEEncryptImpl | /// RSA=>IJTNEEncryptImpl | ||||
/// AES=>IJTNEEncryptImpl | /// AES=>IJTNEEncryptImpl | ||||
/// </summary> | /// </summary> | ||||
public Func<JTNEEncryptMethod, IJTNEEncrypt> PlatformLoginEncrypt { get; private set; } | public Func<JTNEEncryptMethod, IJTNEEncrypt> PlatformLoginEncrypt { get; private set; } | ||||
/// <summary> | /// <summary> | ||||
/// 注册自定义消息 | /// 注册自定义消息 | ||||
/// </summary> | /// </summary> | ||||
/// <typeparam name="TJTNEBodies"></typeparam> | /// <typeparam name="TJTNEBodies"></typeparam> | ||||
/// <param name="msgId"></param> | |||||
/// <param name="customMsgId"></param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies> (byte customMsgId) | public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies> (byte customMsgId) | ||||
where TJTNEBodies : JTNEBodies { | where TJTNEBodies : JTNEBodies { | ||||
JTNEMsgIdFactory.SetMap<TJTNEBodies> (customMsgId); | JTNEMsgIdFactory.SetMap<TJTNEBodies> (customMsgId); | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 重写消息 | /// 重写消息 | ||||
/// </summary> | /// </summary> | ||||
@@ -93,6 +98,7 @@ namespace JTNE.Protocol { | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
@@ -108,12 +114,12 @@ namespace JTNE.Protocol { | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
/// <param name="typeCode">自定义类型编码</param> | |||||
/// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | |||||
/// <param name="dependerId">自定义类型编码</param> | |||||
/// <param name="dependedId">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_JTNE0x81CustomDepenedBody (byte DependerParamId, byte DependedParamId) { | |||||
if (!JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.ContainsKey (DependerParamId)) { | |||||
JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.Add (DependerParamId, DependedParamId); | |||||
public JTNEGlobalConfigs Register_JTNE0x81CustomDepenedBody (byte dependerId, byte dependedId) { | |||||
if (!JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.ContainsKey (dependerId)) { | |||||
JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.Add (dependerId, dependedId); | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -26,12 +26,12 @@ namespace JTNE.Protocol | |||||
/// 命令标识 | /// 命令标识 | ||||
/// <see cref="JTNE.Protocol.Enums.JTNEMsgId"/> | /// <see cref="JTNE.Protocol.Enums.JTNEMsgId"/> | ||||
/// </summary> | /// </summary> | ||||
public byte MsgId { get; set; } | |||||
public JTNEMsgId MsgId { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 应答标志 | /// 应答标志 | ||||
/// <see cref="JTNE.Protocol.Enums.JTNEAskId"/> | /// <see cref="JTNE.Protocol.Enums.JTNEAskId"/> | ||||
/// </summary> | /// </summary> | ||||
public byte AskId { get; set; } | |||||
public JTNEAskId AskId { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 车辆识别码 | /// 车辆识别码 | ||||
/// </summary> | /// </summary> | ||||
@@ -1,52 +1,42 @@ | |||||
using JTNE.Protocol.Extensions; | |||||
using System; | |||||
using System; | |||||
using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; | ||||
using JTNE.Protocol.Extensions; | |||||
[assembly: InternalsVisibleTo("JTNE.Protocol.Test")] | |||||
[assembly : InternalsVisibleTo ("JTNE.Protocol.Test")] | |||||
namespace JTNE.Protocol | |||||
{ | |||||
namespace JTNE.Protocol { | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
public static class JTNESerializer | |||||
{ | |||||
public static byte[] Serialize(JTNEPackage jTNEPackage, int minBufferSize = 256) | |||||
{ | |||||
return Serialize<JTNEPackage>(jTNEPackage, minBufferSize); | |||||
public static class JTNESerializer { | |||||
public static byte[] Serialize (JTNEPackage jTNEPackage, int minBufferSize = 256) { | |||||
return Serialize<JTNEPackage> (jTNEPackage, minBufferSize); | |||||
} | } | ||||
public static JTNEPackage Deserialize(ReadOnlySpan<byte> bytes) | |||||
{ | |||||
return Deserialize<JTNEPackage>(bytes); | |||||
public static JTNEPackage Deserialize (ReadOnlySpan<byte> bytes) { | |||||
return Deserialize<JTNEPackage> (bytes); | |||||
} | } | ||||
public static byte[] Serialize<T>(T obj, int minBufferSize = 256) | |||||
{ | |||||
var formatter = JTNEFormatterExtensions.GetFormatter<T>(); | |||||
byte[] buffer = JTNEArrayPool.Rent(minBufferSize); | |||||
try | |||||
{ | |||||
var len = formatter.Serialize(ref buffer, 0, obj); | |||||
return buffer.AsSpan(0, len).ToArray(); | |||||
} | |||||
finally | |||||
{ | |||||
JTNEArrayPool.Return(buffer); | |||||
public static byte[] Serialize<T> (T obj, int minBufferSize = 256) { | |||||
var formatter = JTNEFormatterExtensions.GetFormatter<T> (); | |||||
byte[] buffer = JTNEArrayPool.Rent (minBufferSize); | |||||
try { | |||||
var len = formatter.Serialize (ref buffer, 0, obj); | |||||
return buffer.AsSpan (0, len).ToArray (); | |||||
} finally { | |||||
JTNEArrayPool.Return (buffer); | |||||
} | } | ||||
} | } | ||||
public static T Deserialize<T>(ReadOnlySpan<byte> bytes) | |||||
{ | |||||
var formatter = JTNEFormatterExtensions.GetFormatter<T>(); | |||||
public static T Deserialize<T> (ReadOnlySpan<byte> bytes) { | |||||
var formatter = JTNEFormatterExtensions.GetFormatter<T> (); | |||||
int readSize; | int readSize; | ||||
return formatter.Deserialize(bytes,out readSize); | |||||
return formatter.Deserialize (bytes, out readSize); | |||||
} | } | ||||
public static dynamic Deserialize(ReadOnlySpan<byte> bytes,Type type) | |||||
{ | |||||
var formatter = JTNEFormatterExtensions.GetFormatter(type); | |||||
return JTNEFormatterResolverExtensions.JTNEDynamicDeserialize(formatter,bytes,out int readSize); | |||||
public static dynamic Deserialize (ReadOnlySpan<byte> bytes, Type type) { | |||||
var formatter = JTNEFormatterExtensions.GetFormatter (type); | |||||
return JTNEFormatterResolverExtensions.JTNEDynamicDeserialize (formatter, bytes, out int readSize); | |||||
} | } | ||||
} | } | ||||
} | |||||
} |