@@ -1,83 +1,79 @@ | |||||
using JTNE.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Extensions; | using JTNE.Protocol.Extensions; | ||||
using JTNE.Protocol.MessageBody; | using JTNE.Protocol.MessageBody; | ||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | using Xunit; | ||||
using Xunit.Abstractions; | using Xunit.Abstractions; | ||||
namespace JTNE.Protocol.Test | |||||
{ | |||||
public class JTNEHeaderPackageTest | |||||
{ | |||||
namespace JTNE.Protocol.Test { | |||||
public class JTNEHeaderPackageTest { | |||||
private readonly ITestOutputHelper output; | private readonly ITestOutputHelper output; | ||||
public JTNEHeaderPackageTest(ITestOutputHelper outputHelper) | |||||
{ | |||||
public JTNEHeaderPackageTest (ITestOutputHelper outputHelper) { | |||||
this.output = outputHelper; | this.output = outputHelper; | ||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test1() | |||||
{ | |||||
JTNEHeaderPackage jTNEHeaderPackage = new JTNEHeaderPackage(); | |||||
public void Test1 () { | |||||
JTNEHeaderPackage jTNEHeaderPackage = new JTNEHeaderPackage (); | |||||
jTNEHeaderPackage.VIN = "123456789"; | jTNEHeaderPackage.VIN = "123456789"; | ||||
jTNEHeaderPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEHeaderPackage.MsgId = JTNEMsgId.login.ToByteValue(); | |||||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | |||||
jTNE_0X01.PDATime = DateTime.Parse("2019-01-22 23:55:56"); | |||||
jTNEHeaderPackage.AskId = JTNEAskId.CMD.ToByteValue (); | |||||
jTNEHeaderPackage.MsgId = JTNEMsgId.login.ToByteValue (); | |||||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01 (); | |||||
jTNE_0X01.PDATime = DateTime.Parse ("2019-01-22 23:55:56"); | |||||
jTNE_0X01.LoginNum = 1; | jTNE_0X01.LoginNum = 1; | ||||
jTNE_0X01.BatteryLength = 0x04; | jTNE_0X01.BatteryLength = 0x04; | ||||
jTNE_0X01.SIM = "12345678998765432100"; | jTNE_0X01.SIM = "12345678998765432100"; | ||||
jTNE_0X01.BatteryNos = new List<string>() | |||||
{ | |||||
"1234", | |||||
"4567", | |||||
"9870" | |||||
jTNE_0X01.BatteryNos = new List<string> () { | |||||
"1234", | |||||
"4567", | |||||
"9870" | |||||
}; | }; | ||||
jTNEHeaderPackage.Bodies = JTNESerializer.Serialize(jTNE_0X01); | |||||
var hex = JTNESerializer.Serialize(jTNEHeaderPackage).ToHexString(); | |||||
Assert.Equal("232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD", hex); | |||||
jTNEHeaderPackage.Bodies = JTNESerializer.Serialize (jTNE_0X01); | |||||
var hex = JTNESerializer.Serialize (jTNEHeaderPackage).ToHexString (); | |||||
Assert.Equal ("232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | |||||
{ | |||||
var data= "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes(); | |||||
JTNEHeaderPackage jTNEHeaderPackage = JTNESerializer.Deserialize<JTNEHeaderPackage>(data); | |||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEHeaderPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.login.ToByteValue(), jTNEHeaderPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEHeaderPackage.VIN); | |||||
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(1, jTNE_0X01.LoginNum); | |||||
Assert.Equal(0x04, jTNE_0X01.BatteryLength); | |||||
Assert.Equal("12345678998765432100", jTNE_0X01.SIM); | |||||
Assert.Equal(3, jTNE_0X01.BatteryCount); | |||||
Assert.Equal("1234", jTNE_0X01.BatteryNos[0]); | |||||
Assert.Equal("4567", jTNE_0X01.BatteryNos[1]); | |||||
Assert.Equal("9870", jTNE_0X01.BatteryNos[2]); | |||||
public void Test2 () { | |||||
var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes (); | |||||
JTNEHeaderPackage jTNEHeaderPackage = JTNESerializer.Deserialize<JTNEHeaderPackage> (data); | |||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), jTNEHeaderPackage.AskId); | |||||
Assert.Equal (JTNEMsgId.login.ToByteValue (), jTNEHeaderPackage.MsgId); | |||||
Assert.Equal ("123456789", jTNEHeaderPackage.VIN); | |||||
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 (1, jTNE_0X01.LoginNum); | |||||
Assert.Equal (0x04, jTNE_0X01.BatteryLength); | |||||
Assert.Equal ("12345678998765432100", jTNE_0X01.SIM); | |||||
Assert.Equal (3, jTNE_0X01.BatteryCount); | |||||
Assert.Equal ("1234", jTNE_0X01.BatteryNos[0]); | |||||
Assert.Equal ("4567", jTNE_0X01.BatteryNos[1]); | |||||
Assert.Equal ("9870", jTNE_0X01.BatteryNos[2]); | |||||
} | } | ||||
[Fact] | |||||
public void TestGuangtai(){ | |||||
var data = "23 23 05 FE 30 30 30 30 30 30 30 30 30 30 30 30 30 32 31 31 31 01 29 00 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); | |||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), package.AskId); | |||||
Assert.Equal(JTNEMsgId.platformlogin.ToByteValue(), package.MsgId); | |||||
Assert.Equal(41,package.DataUnitLength); | |||||
Assert.NotNull(package.Bodies); | |||||
[Fact] | |||||
public void TestGuangtai () { | |||||
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); | |||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), package.AskId); | |||||
Assert.Equal (JTNEMsgId.platformlogin.ToByteValue (), package.MsgId); | |||||
Assert.Equal (41, package.DataUnitLength); | |||||
Assert.NotNull (package.Bodies); | |||||
Assert.IsType<JTNE_0x05>(package.Bodies); | |||||
Assert.IsType<JTNE_0x05> (package.Bodies); | |||||
output.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(package.Bodies,Formatting.Indented)); | |||||
output.WriteLine (Newtonsoft.Json.JsonConvert.SerializeObject (package.Bodies, Formatting.Indented)); | |||||
var loginbody = (JTNE_0x05) package.Bodies; | var loginbody = (JTNE_0x05) package.Bodies; | ||||
Assert.Equal("威海广泰空港",loginbody.PlatformUserName); | |||||
Assert.Equal(256,loginbody.LoginNum); | |||||
Assert.Equal ("威海广泰空港", loginbody.PlatformUserName); | |||||
Assert.Equal (1, loginbody.LoginNum); | |||||
Assert.Equal (JTNEEncryptMethod.None, loginbody.EncryptMethod); | |||||
} | |||||
} | |||||
} | } | ||||
} | |||||
} |
@@ -95,6 +95,7 @@ namespace JTNE.Protocol.Test.MessageBody | |||||
{ | { | ||||
JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA1, typeof(JTNE_0x02_0xA1)); | JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA1, typeof(JTNE_0x02_0xA1)); | ||||
JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA2, typeof(JTNE_0x02_0xA2)); | JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA2, typeof(JTNE_0x02_0xA2)); | ||||
JTNEGlobalConfigs.Instance.Encoding = Encoding.UTF8; | |||||
var data = "01040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502A1000E536D616C6C436869000000000012A20014E5B08FE6B1A0E69C89E99990E585ACE58FB80000".ToHexBytes(); | var data = "01040507003A00001A0A00640063030602007B02030202010201004100370300EC00640203020042023605085800650308AE006F0C9600030102030D1B221A0A560D086502A1000E536D616C6C436869000000000012A20014E5B08FE6B1A0E69C89E99990E585ACE58FB80000".ToHexBytes(); | ||||
JTNE_0x02 jTNE_0X02 = JTNESerializer.Deserialize<JTNE_0x02>(data); | JTNE_0x02 jTNE_0X02 = JTNESerializer.Deserialize<JTNE_0x02>(data); | ||||
@@ -39,6 +39,7 @@ namespace JTNE.Protocol.Test.MessageBody | |||||
{ | { | ||||
JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA1, typeof(JTNE_0x02_0xA1)); | JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA1, typeof(JTNE_0x02_0xA1)); | ||||
JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA2, typeof(JTNE_0x02_0xA2)); | JTNEGlobalConfigs.Instance.Register_JTNE0x02CustomBody(0xA2, typeof(JTNE_0x02_0xA2)); | ||||
JTNEGlobalConfigs.Instance.Encoding = Encoding.UTF8; | |||||
var data = "A1000E536D616C6C436869000000000012A20014E5B08FE6B1A0E69C89E99990E585ACE58FB80000".ToHexBytes(); | var data = "A1000E536D616C6C436869000000000012A20014E5B08FE6B1A0E69C89E99990E585ACE58FB80000".ToHexBytes(); | ||||
JTNE_0x02 jTNE_0X02 = JTNESerializer.Deserialize<JTNE_0x02>(data); | JTNE_0x02 jTNE_0X02 = JTNESerializer.Deserialize<JTNE_0x02>(data); | ||||
@@ -31,7 +31,7 @@ namespace JTNE.Protocol.Test.MessageBody | |||||
Assert.Equal(6666, jTNE_0X05.LoginNum); | Assert.Equal(6666, jTNE_0X05.LoginNum); | ||||
Assert.Equal("SmallChi518", jTNE_0X05.PlatformUserName); | Assert.Equal("SmallChi518", jTNE_0X05.PlatformUserName); | ||||
Assert.Equal("1234567890123456789", jTNE_0X05.PlatformPassword); | Assert.Equal("1234567890123456789", jTNE_0X05.PlatformPassword); | ||||
Assert.Equal(0x00, jTNE_0X05.EncryptMethod); | |||||
Assert.Equal(0x00, (byte)jTNE_0X05.EncryptMethod); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -57,11 +57,11 @@ namespace JTNE.Protocol.Test.Package | |||||
[Fact] | [Fact] | ||||
public void Test3() | public void Test3() | ||||
{ | { | ||||
JTNEGlobalConfigs.Instance.SetDataBodiesEncrypt((msgId)=> | |||||
JTNEGlobalConfigs.Instance.SetDataBodiesEncrypt((encryptMethod)=> | |||||
{ | { | ||||
switch (msgId) | |||||
switch (encryptMethod) | |||||
{ | { | ||||
case 0x03: | |||||
case JTNEEncryptMethod.AES128: | |||||
return new Default_AES128EncryptImpl(); | return new Default_AES128EncryptImpl(); | ||||
default: | default: | ||||
return default; | return default; | ||||
@@ -71,7 +71,7 @@ namespace JTNE.Protocol.Test.Package | |||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | ||||
jTNEPackage.MsgId = JTNEMsgId.login.ToByteValue(); | jTNEPackage.MsgId = JTNEMsgId.login.ToByteValue(); | ||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
jTNEPackage.EncryptMethod = JTNEEncryptMethod.AES128.ToByteValue(); | |||||
jTNEPackage.EncryptMethod = JTNEEncryptMethod.AES128; | |||||
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; | ||||
@@ -91,11 +91,11 @@ namespace JTNE.Protocol.Test.Package | |||||
[Fact] | [Fact] | ||||
public void Test4() | public void Test4() | ||||
{ | { | ||||
JTNEGlobalConfigs.Instance.SetDataBodiesEncrypt((msgId) => | |||||
JTNEGlobalConfigs.Instance.SetDataBodiesEncrypt((encryptMethod) => | |||||
{ | { | ||||
switch (msgId) | |||||
switch (encryptMethod) | |||||
{ | { | ||||
case 0x03: | |||||
case JTNEEncryptMethod.AES128: | |||||
return new Default_AES128EncryptImpl(); | return new Default_AES128EncryptImpl(); | ||||
default: | default: | ||||
return default; | return default; | ||||
@@ -106,7 +106,7 @@ namespace JTNE.Protocol.Test.Package | |||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | ||||
Assert.Equal(JTNEMsgId.login.ToByteValue(), jTNEPackage.MsgId); | Assert.Equal(JTNEMsgId.login.ToByteValue(), jTNEPackage.MsgId); | ||||
Assert.Equal("123456789", jTNEPackage.VIN); | Assert.Equal("123456789", jTNEPackage.VIN); | ||||
Assert.Equal(JTNEEncryptMethod.AES128.ToByteValue(), jTNEPackage.EncryptMethod); | |||||
Assert.Equal(JTNEEncryptMethod.AES128, jTNEPackage.EncryptMethod); | |||||
JTNE_0x01 jTNE_0X01 = jTNEPackage.Bodies as JTNE_0x01; | JTNE_0x01 jTNE_0X01 = jTNEPackage.Bodies as JTNE_0x01; | ||||
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); | ||||
@@ -1,46 +1,42 @@ | |||||
using JTNE.Protocol.Extensions; | |||||
using System; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
using Xunit; | |||||
using JTNE.Protocol.Enums; | using JTNE.Protocol.Enums; | ||||
using JTNE.Protocol.Extensions; | |||||
using JTNE.Protocol.MessageBody; | using JTNE.Protocol.MessageBody; | ||||
using Xunit; | |||||
namespace JTNE.Protocol.Test.Package | |||||
{ | |||||
public class JTNE_0x05_PackageTest | |||||
{ | |||||
namespace JTNE.Protocol.Test.Package { | |||||
public class JTNE_0x05_PackageTest { | |||||
[Fact] | [Fact] | ||||
public void Test1() | |||||
{ | |||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue(); | |||||
jTNEPackage.MsgId = JTNEMsgId.platformlogin.ToByteValue(); | |||||
public void Test1 () { | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
jTNEPackage.AskId = JTNEAskId.CMD.ToByteValue (); | |||||
jTNEPackage.MsgId = JTNEMsgId.platformlogin.ToByteValue (); | |||||
jTNEPackage.VIN = "123456789"; | jTNEPackage.VIN = "123456789"; | ||||
JTNE_0x05 jTNE_0X05 = new JTNE_0x05(); | |||||
jTNE_0X05.LoginTime = DateTime.Parse("2019-01-23 23:55:56"); | |||||
JTNE_0x05 jTNE_0X05 = new JTNE_0x05 (); | |||||
jTNE_0X05.LoginTime = DateTime.Parse ("2019-01-23 23:55:56"); | |||||
jTNE_0X05.LoginNum = 6666; | jTNE_0X05.LoginNum = 6666; | ||||
jTNE_0X05.PlatformUserName = "SmallChi518"; | jTNE_0X05.PlatformUserName = "SmallChi518"; | ||||
jTNE_0X05.PlatformPassword = "1234567890123456789"; | jTNE_0X05.PlatformPassword = "1234567890123456789"; | ||||
jTNEPackage.Bodies = jTNE_0X05; | jTNEPackage.Bodies = jTNE_0X05; | ||||
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | |||||
Assert.Equal("232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF", hex); | |||||
var hex = JTNESerializer.Serialize (jTNEPackage).ToHexString (); | |||||
Assert.Equal ("232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF", hex); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test2() | |||||
{ | |||||
var data = "232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF".ToHexBytes(); | |||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize(data); | |||||
Assert.Equal(JTNEAskId.CMD.ToByteValue(), jTNEPackage.AskId); | |||||
Assert.Equal(JTNEMsgId.platformlogin.ToByteValue(), jTNEPackage.MsgId); | |||||
Assert.Equal("123456789", jTNEPackage.VIN); | |||||
public void Test2 () { | |||||
var data = "232305FE31323334353637383900000000000000000100291301171737381A0A536D616C6C43686935313800313233343536373839303132333435363738390001FF".ToHexBytes (); | |||||
JTNEPackage jTNEPackage = JTNESerializer.Deserialize (data); | |||||
Assert.Equal (JTNEAskId.CMD.ToByteValue (), jTNEPackage.AskId); | |||||
Assert.Equal (JTNEMsgId.platformlogin.ToByteValue (), jTNEPackage.MsgId); | |||||
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(6666, jTNE_0X05.LoginNum); | |||||
Assert.Equal("SmallChi518", jTNE_0X05.PlatformUserName); | |||||
Assert.Equal("1234567890123456789", jTNE_0X05.PlatformPassword); | |||||
Assert.Equal(0x01, jTNE_0X05.EncryptMethod); | |||||
Assert.Equal (DateTime.Parse ("2019-01-23 23:55:56"), jTNE_0X05.LoginTime); | |||||
Assert.Equal (6666, jTNE_0X05.LoginNum); | |||||
Assert.Equal ("SmallChi518", jTNE_0X05.PlatformUserName); | |||||
Assert.Equal ("1234567890123456789", jTNE_0X05.PlatformPassword); | |||||
Assert.Equal (JTNEEncryptMethod.None, jTNE_0X05.EncryptMethod); | |||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -24,7 +24,7 @@ namespace JTNE.Protocol.Extensions | |||||
public static ushort ReadUInt16Little(ReadOnlySpan<byte> read, ref int offset) | public static ushort ReadUInt16Little(ReadOnlySpan<byte> read, ref int offset) | ||||
{ | { | ||||
//ushort value = (ushort)((read[offset] << 8) | (read[offset + 1])); | //ushort value = (ushort)((read[offset] << 8) | (read[offset + 1])); | ||||
var value = BinaryPrimitives.ReadUInt16LittleEndian(read.Slice(offset,2)); | |||||
var value = BinaryPrimitives.ReadUInt16BigEndian(read.Slice(offset,2)); // BinaryPrimitives.ReadUInt16LittleEndian(read.Slice(offset,2)); | |||||
offset = offset + 2; | offset = offset + 2; | ||||
return value; | return value; | ||||
} | } | ||||
@@ -1,156 +1,132 @@ | |||||
using JTNE.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Exceptions; | using JTNE.Protocol.Exceptions; | ||||
using JTNE.Protocol.Extensions; | using JTNE.Protocol.Extensions; | ||||
using JTNE.Protocol.Internal; | using JTNE.Protocol.Internal; | ||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JTNE.Protocol.Formatters | |||||
{ | |||||
public class JTNEPackageFormatter : IJTNEFormatter<JTNEPackage> | |||||
{ | |||||
namespace JTNE.Protocol.Formatters { | |||||
public class JTNEPackageFormatter : IJTNEFormatter<JTNEPackage> { | |||||
private const byte FixedDataBodyLength = 2; | private const byte FixedDataBodyLength = 2; | ||||
public JTNEPackage Deserialize(ReadOnlySpan<byte> bytes, out int readSize) | |||||
{ | |||||
public JTNEPackage Deserialize (ReadOnlySpan<byte> bytes, out int readSize) { | |||||
int offset = 0; | int offset = 0; | ||||
// 1.进行固定头校验 | // 1.进行固定头校验 | ||||
if (bytes[offset] != JTNEPackage.BeginFlag && bytes[offset + 1] == JTNEPackage.BeginFlag) | if (bytes[offset] != JTNEPackage.BeginFlag && bytes[offset + 1] == JTNEPackage.BeginFlag) | ||||
throw new JTNEException(JTNEErrorCode.BeginFlagError, $"{bytes[offset]},{bytes[offset + 1]}"); | |||||
throw new JTNEException (JTNEErrorCode.BeginFlagError, $"{bytes[offset]},{bytes[offset + 1]}"); | |||||
// 2.进行BCC校验码 | // 2.进行BCC校验码 | ||||
// 校验位 = 报文长度 - 最后一位(校验位) | // 校验位 = 报文长度 - 最后一位(校验位) | ||||
if (!JTNEGlobalConfigs.Instance.SkipCRCCode) | |||||
{ | |||||
if (!JTNEGlobalConfigs.Instance.SkipCRCCode) { | |||||
byte bCCCode = bytes[bytes.Length - 1]; | byte bCCCode = bytes[bytes.Length - 1]; | ||||
byte bCCCode2 = bytes.ToXor(2, bytes.Length - 1); | |||||
byte bCCCode2 = bytes.ToXor (2, bytes.Length - 1); | |||||
if (bCCCode != bCCCode2) | if (bCCCode != bCCCode2) | ||||
throw new JTNEException(JTNEErrorCode.BCCCodeError, $"request:{bCCCode}!=calculate:{bCCCode2}"); | |||||
throw new JTNEException (JTNEErrorCode.BCCCodeError, $"request:{bCCCode}!=calculate:{bCCCode2}"); | |||||
} | } | ||||
JTNEPackage jTNEPackage = new JTNEPackage(); | |||||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||||
offset += 2; | offset += 2; | ||||
// 3.命令标识 | // 3.命令标识 | ||||
jTNEPackage.MsgId = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
jTNEPackage.MsgId = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
// 4.应答标识 | // 4.应答标识 | ||||
jTNEPackage.AskId = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
jTNEPackage.AskId = 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.数据加密方式 | ||||
jTNEPackage.EncryptMethod = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
jTNEPackage.EncryptMethod = (JTNEEncryptMethod) JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
// 7.数据单元长度是数据单元的总字节数 | // 7.数据单元长度是数据单元的总字节数 | ||||
jTNEPackage.DataUnitLength = JTNEBinaryExtensions.ReadUInt16Little(bytes, ref offset); | |||||
jTNEPackage.DataUnitLength = JTNEBinaryExtensions.ReadUInt16Little (bytes, ref offset); | |||||
// 8.数据体 | // 8.数据体 | ||||
// 8.1.根据数据加密方式进行解码 | // 8.1.根据数据加密方式进行解码 | ||||
// 8.2.解析出对应数据体 | // 8.2.解析出对应数据体 | ||||
if (jTNEPackage.DataUnitLength > 0) | |||||
{ | |||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId(jTNEPackage.MsgId); | |||||
if (jTNEBodiesImplType != null) | |||||
{ | |||||
if (jTNEPackage.DataUnitLength > 0) { | |||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (jTNEPackage.MsgId); | |||||
if (jTNEBodiesImplType != null) { | |||||
int bodyReadSize = 0; | int bodyReadSize = 0; | ||||
try | |||||
{ | |||||
if (jTNEPackage.EncryptMethod == 0x01) | |||||
{ | |||||
jTNEPackage.Bodies = JTNEFormatterResolverExtensions.JTNEDynamicDeserialize( | |||||
JTNEFormatterExtensions.GetFormatter(jTNEBodiesImplType), | |||||
bytes.Slice(offset, jTNEPackage.DataUnitLength), | |||||
try { | |||||
if (jTNEPackage.EncryptMethod == JTNEEncryptMethod.None) { | |||||
jTNEPackage.Bodies = JTNEFormatterResolverExtensions.JTNEDynamicDeserialize ( | |||||
JTNEFormatterExtensions.GetFormatter (jTNEBodiesImplType), | |||||
bytes.Slice (offset, jTNEPackage.DataUnitLength), | |||||
out bodyReadSize); | out bodyReadSize); | ||||
} | |||||
else | |||||
{ | |||||
if (JTNEGlobalConfigs.Instance.DataBodiesEncrypt != null) | |||||
{ | |||||
var data = JTNEGlobalConfigs.Instance.DataBodiesEncrypt(jTNEPackage.EncryptMethod) | |||||
.Decrypt(bytes.Slice(offset, jTNEPackage.DataUnitLength).ToArray()); | |||||
jTNEPackage.Bodies = JTNEFormatterResolverExtensions.JTNEDynamicDeserialize( | |||||
JTNEFormatterExtensions.GetFormatter(jTNEBodiesImplType), | |||||
} else { | |||||
if (JTNEGlobalConfigs.Instance.DataBodiesEncrypt != null) { | |||||
var data = JTNEGlobalConfigs.Instance.DataBodiesEncrypt (jTNEPackage.EncryptMethod) | |||||
.Decrypt (bytes.Slice (offset, jTNEPackage.DataUnitLength).ToArray ()); | |||||
jTNEPackage.Bodies = JTNEFormatterResolverExtensions.JTNEDynamicDeserialize ( | |||||
JTNEFormatterExtensions.GetFormatter (jTNEBodiesImplType), | |||||
data, | data, | ||||
out bodyReadSize); | out bodyReadSize); | ||||
} | } | ||||
} | } | ||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
throw new JTNEException(JTNEErrorCode.BodiesParseError, ex); | |||||
} catch (Exception ex) { | |||||
throw new JTNEException (JTNEErrorCode.BodiesParseError, ex); | |||||
} | } | ||||
offset += bodyReadSize; | offset += bodyReadSize; | ||||
} | } | ||||
} | } | ||||
// 9.校验码 | // 9.校验码 | ||||
jTNEPackage.BCCCode = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
jTNEPackage.BCCCode = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||||
readSize = offset; | readSize = offset; | ||||
return jTNEPackage; | return jTNEPackage; | ||||
} | } | ||||
public int Serialize(ref byte[] bytes, int offset, JTNEPackage value) | |||||
{ | |||||
public int Serialize (ref byte[] bytes, int offset, JTNEPackage value) { | |||||
// 1.起始符1 | // 1.起始符1 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, value.BeginFlag1); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.BeginFlag1); | |||||
// 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, value.MsgId); | |||||
// 4.应答标识 | // 4.应答标识 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, value.AskId); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.AskId); | |||||
// 5.VIN | // 5.VIN | ||||
offset += JTNEBinaryExtensions.WriteStringPadRightLittle(bytes, offset, value.VIN, 17); | |||||
offset += JTNEBinaryExtensions.WriteStringPadRightLittle (bytes, offset, value.VIN, 17); | |||||
// 6.数据加密方式 | // 6.数据加密方式 | ||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, value.EncryptMethod); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, (byte) value.EncryptMethod); | |||||
// 7.记录当前偏移量 | // 7.记录当前偏移量 | ||||
int tmpOffset = offset; | int tmpOffset = offset; | ||||
// 8.数据体 | // 8.数据体 | ||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId(value.MsgId); | |||||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (value.MsgId); | |||||
int messageBodyOffset = 0; | int messageBodyOffset = 0; | ||||
if (jTNEBodiesImplType != null) | |||||
{ | |||||
if (value.Bodies != null) | |||||
{ | |||||
if (jTNEBodiesImplType != null) { | |||||
if (value.Bodies != null) { | |||||
// 8.1.处理数据体 | // 8.1.处理数据体 | ||||
// 8.2.判断是否有加密 | // 8.2.判断是否有加密 | ||||
messageBodyOffset = JTNEFormatterResolverExtensions.JTNEDynamicSerialize( | |||||
JTNEFormatterExtensions.GetFormatter(jTNEBodiesImplType), | |||||
messageBodyOffset = JTNEFormatterResolverExtensions.JTNEDynamicSerialize ( | |||||
JTNEFormatterExtensions.GetFormatter (jTNEBodiesImplType), | |||||
ref bytes, | ref bytes, | ||||
offset + FixedDataBodyLength, | offset + FixedDataBodyLength, | ||||
value.Bodies); | value.Bodies); | ||||
if (value.EncryptMethod == 0x01) | |||||
{ | |||||
if (value.EncryptMethod == JTNEEncryptMethod.None) { | |||||
// 9.通过tmpOffset反写数据单元长度 | // 9.通过tmpOffset反写数据单元长度 | ||||
JTNEBinaryExtensions.WriteUInt16Little(bytes, tmpOffset, (ushort)(messageBodyOffset - offset- FixedDataBodyLength)); | |||||
JTNEBinaryExtensions.WriteUInt16Little (bytes, tmpOffset, (ushort) (messageBodyOffset - offset - FixedDataBodyLength)); | |||||
offset = messageBodyOffset; | offset = messageBodyOffset; | ||||
} | |||||
else | |||||
{ | |||||
if (JTNEGlobalConfigs.Instance.DataBodiesEncrypt != null) | |||||
{ | |||||
} else { | |||||
if (JTNEGlobalConfigs.Instance.DataBodiesEncrypt != null) { | |||||
// 8.1.先进行分割数据体 | // 8.1.先进行分割数据体 | ||||
var bodiesData = bytes.AsSpan(tmpOffset+ FixedDataBodyLength, messageBodyOffset - offset - FixedDataBodyLength).ToArray(); | |||||
var bodiesData = bytes.AsSpan (tmpOffset + FixedDataBodyLength, messageBodyOffset - offset - FixedDataBodyLength).ToArray (); | |||||
// 8.2.将数据体进行加密 | // 8.2.将数据体进行加密 | ||||
var data = JTNEGlobalConfigs.Instance.DataBodiesEncrypt(value.EncryptMethod) | |||||
.Encrypt(bodiesData); | |||||
var data = JTNEGlobalConfigs.Instance.DataBodiesEncrypt (value.EncryptMethod) | |||||
.Encrypt (bodiesData); | |||||
// 9.通过tmpOffset反写加密后数据单元长度 | // 9.通过tmpOffset反写加密后数据单元长度 | ||||
JTNEBinaryExtensions.WriteUInt16Little(bytes, tmpOffset, (ushort)data.Length); | |||||
JTNEBinaryExtensions.WriteUInt16Little (bytes, tmpOffset, (ushort) data.Length); | |||||
// 8.3.写入加密后的数据体 | // 8.3.写入加密后的数据体 | ||||
offset += FixedDataBodyLength; | offset += FixedDataBodyLength; | ||||
offset += JTNEBinaryExtensions.WriteBytesLittle(bytes, offset, data); | |||||
offset += JTNEBinaryExtensions.WriteBytesLittle (bytes, offset, data); | |||||
} | } | ||||
} | } | ||||
} | |||||
else | |||||
{ | |||||
} else { | |||||
// 9.数据单元长度 | // 9.数据单元长度 | ||||
offset += JTNEBinaryExtensions.WriteUInt16Little(bytes, offset, 0); | |||||
offset += JTNEBinaryExtensions.WriteUInt16Little (bytes, offset, 0); | |||||
} | } | ||||
} | |||||
else | |||||
{ | |||||
} else { | |||||
// 9.数据单元长度 | // 9.数据单元长度 | ||||
offset += JTNEBinaryExtensions.WriteUInt16Little(bytes, offset, 0); | |||||
offset += JTNEBinaryExtensions.WriteUInt16Little (bytes, offset, 0); | |||||
} | } | ||||
// 10.校验码 | // 10.校验码 | ||||
var bccCode = bytes.ToXor(2, offset); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, bccCode); | |||||
var bccCode = bytes.ToXor (2, offset); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, bccCode); | |||||
return offset; | return offset; | ||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -1,4 +1,5 @@ | |||||
using JTNE.Protocol.Extensions; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Extensions; | |||||
using JTNE.Protocol.MessageBody; | using JTNE.Protocol.MessageBody; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -16,7 +17,7 @@ namespace JTNE.Protocol.Formatters.MessageBodyFormatters | |||||
jTNE_0X05.LoginNum = JTNEBinaryExtensions.ReadUInt16Little(bytes, ref offset); | jTNE_0X05.LoginNum = JTNEBinaryExtensions.ReadUInt16Little(bytes, ref offset); | ||||
jTNE_0X05.PlatformUserName = JTNEBinaryExtensions.ReadStringLittle(bytes, ref offset,12); | jTNE_0X05.PlatformUserName = JTNEBinaryExtensions.ReadStringLittle(bytes, ref offset,12); | ||||
jTNE_0X05.PlatformPassword = JTNEBinaryExtensions.ReadStringLittle(bytes, ref offset, 20); | jTNE_0X05.PlatformPassword = JTNEBinaryExtensions.ReadStringLittle(bytes, ref offset, 20); | ||||
jTNE_0X05.EncryptMethod = JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
jTNE_0X05.EncryptMethod = (JTNEEncryptMethod)JTNEBinaryExtensions.ReadByteLittle(bytes, ref offset); | |||||
readSize = offset; | readSize = offset; | ||||
return jTNE_0X05; | return jTNE_0X05; | ||||
} | } | ||||
@@ -27,7 +28,7 @@ namespace JTNE.Protocol.Formatters.MessageBodyFormatters | |||||
offset += JTNEBinaryExtensions.WriteUInt16Little(bytes, offset, value.LoginNum); | offset += JTNEBinaryExtensions.WriteUInt16Little(bytes, offset, value.LoginNum); | ||||
offset += JTNEBinaryExtensions.WriteStringLittle(bytes, offset, value.PlatformUserName,12); | offset += JTNEBinaryExtensions.WriteStringLittle(bytes, offset, value.PlatformUserName,12); | ||||
offset += JTNEBinaryExtensions.WriteStringLittle(bytes, offset, value.PlatformPassword, 20); | offset += JTNEBinaryExtensions.WriteStringLittle(bytes, offset, value.PlatformPassword, 20); | ||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, value.EncryptMethod); | |||||
offset += JTNEBinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.EncryptMethod); | |||||
return offset; | return offset; | ||||
} | } | ||||
} | } | ||||
@@ -14,11 +14,12 @@ | |||||
<PackageProjectUrl>https://github.com/SmallChi/JTNewEnergy</PackageProjectUrl> | <PackageProjectUrl>https://github.com/SmallChi/JTNewEnergy</PackageProjectUrl> | ||||
<PackageLicenseUrl>https://github.com/SmallChi/JTNewEnergy/blob/master/LICENSE</PackageLicenseUrl> | <PackageLicenseUrl>https://github.com/SmallChi/JTNewEnergy/blob/master/LICENSE</PackageLicenseUrl> | ||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> | <GeneratePackageOnBuild>true</GeneratePackageOnBuild> | ||||
<Version>1.0.0</Version> | |||||
<Version>1.0.1</Version> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | |||||
<DocumentationFile></DocumentationFile> | |||||
<PropertyGroup> | |||||
<GenerateDocumentationFile>true</GenerateDocumentationFile> | |||||
<NoWarn>1591</NoWarn> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
@@ -74,8 +75,4 @@ | |||||
<PackageReference Include="System.Memory" Version="4.5.2" /> | <PackageReference Include="System.Memory" Version="4.5.2" /> | ||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" /> | <PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | |||||
<Folder Include="Properties\" /> | |||||
</ItemGroup> | |||||
</Project> | </Project> |
@@ -1,38 +1,35 @@ | |||||
using JTNE.Protocol.Interfaces; | |||||
using System; | |||||
using System.Text; | |||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Interfaces; | |||||
using JTNE.Protocol.Internal; | using JTNE.Protocol.Internal; | ||||
using JTNE.Protocol.MessageBody; | using JTNE.Protocol.MessageBody; | ||||
using System; | |||||
using System.Text; | |||||
namespace JTNE.Protocol | |||||
{ | |||||
namespace JTNE.Protocol { | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
public class JTNEGlobalConfigs | |||||
{ | |||||
private static readonly Lazy<JTNEGlobalConfigs> instance = new Lazy<JTNEGlobalConfigs>(() => new JTNEGlobalConfigs()); | |||||
public class JTNEGlobalConfigs { | |||||
private static readonly Lazy<JTNEGlobalConfigs> instance = new Lazy<JTNEGlobalConfigs> (() => new JTNEGlobalConfigs ()); | |||||
private JTNEGlobalConfigs() | |||||
{ | |||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); | |||||
Encoding = Encoding.GetEncoding("GB18030"); | |||||
private JTNEGlobalConfigs () { | |||||
Encoding.RegisterProvider (CodePagesEncodingProvider.Instance); | |||||
Encoding = Encoding.UTF8; | |||||
SkipCRCCode = false; | SkipCRCCode = false; | ||||
DeviceMsgSNDistributed = new DefaultDeviceMsgSNDistributedImpl(); | |||||
PlatformMsgSNDistributed = new DefaultPlatformMsgSNDistributedImpl(); | |||||
DeviceMsgSNDistributed = new DefaultDeviceMsgSNDistributedImpl (); | |||||
PlatformMsgSNDistributed = new DefaultPlatformMsgSNDistributedImpl (); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 字符串编码,默认 GB18030 | /// 字符串编码,默认 GB18030 | ||||
/// </summary> | /// </summary> | ||||
public Encoding Encoding { get; } | |||||
public Encoding Encoding { get; set;} | |||||
/// <summary> | /// <summary> | ||||
/// | /// | ||||
/// </summary> | /// </summary> | ||||
public static JTNEGlobalConfigs Instance | |||||
{ | |||||
get | |||||
{ | |||||
public static JTNEGlobalConfigs Instance { | |||||
get { | |||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
} | } | ||||
@@ -55,23 +52,22 @@ namespace JTNE.Protocol | |||||
/// RSA=>IJTNEEncryptImpl | /// RSA=>IJTNEEncryptImpl | ||||
/// AES=>IJTNEEncryptImpl | /// AES=>IJTNEEncryptImpl | ||||
/// </summary> | /// </summary> | ||||
public Func<byte,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<byte, 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="msgId"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies>(byte customMsgId) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
JTNEMsgIdFactory.SetMap<TJTNEBodies>(customMsgId); | |||||
public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies> (byte customMsgId) | |||||
where TJTNEBodies : JTNEBodies { | |||||
JTNEMsgIdFactory.SetMap<TJTNEBodies> (customMsgId); | |||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -80,10 +76,9 @@ namespace JTNE.Protocol | |||||
/// <typeparam name="TJTNEBodies"></typeparam> | /// <typeparam name="TJTNEBodies"></typeparam> | ||||
/// <param name="overwriteMsgId"></param> | /// <param name="overwriteMsgId"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Overwrite_MsgId<TJTNEBodies>(byte overwriteMsgId) | |||||
where TJTNEBodies : JTNEBodies | |||||
{ | |||||
JTNEMsgIdFactory.ReplaceMap<TJTNEBodies>(overwriteMsgId); | |||||
public JTNEGlobalConfigs Overwrite_MsgId<TJTNEBodies> (byte overwriteMsgId) | |||||
where TJTNEBodies : JTNEBodies { | |||||
JTNEMsgIdFactory.ReplaceMap<TJTNEBodies> (overwriteMsgId); | |||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -92,11 +87,9 @@ namespace JTNE.Protocol | |||||
/// <param name="typeCode">自定义类型编码</param> | /// <param name="typeCode">自定义类型编码</param> | ||||
/// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x02_CustomBody</param> | /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x02_CustomBody</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_JTNE0x02CustomBody(byte typeCode, Type type) | |||||
{ | |||||
if (!JTNE_0x02_CustomBody.CustomTypeCodes.ContainsKey(typeCode)) | |||||
{ | |||||
JTNE_0x02_CustomBody.CustomTypeCodes.Add(typeCode, type); | |||||
public JTNEGlobalConfigs Register_JTNE0x02CustomBody (byte typeCode, Type type) { | |||||
if (!JTNE_0x02_CustomBody.CustomTypeCodes.ContainsKey (typeCode)) { | |||||
JTNE_0x02_CustomBody.CustomTypeCodes.Add (typeCode, type); | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -106,11 +99,9 @@ namespace JTNE.Protocol | |||||
/// <param name="typeCode">自定义类型编码</param> | /// <param name="typeCode">自定义类型编码</param> | ||||
/// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_JTNE0x81CustomBody(byte typeCode, Type type) | |||||
{ | |||||
if (!JTNE_0x81_Body.JTNE_0x81Method.ContainsKey(typeCode)) | |||||
{ | |||||
JTNE_0x81_Body.JTNE_0x81Method.Add(typeCode, type); | |||||
public JTNEGlobalConfigs Register_JTNE0x81CustomBody (byte typeCode, Type type) { | |||||
if (!JTNE_0x81_Body.JTNE_0x81Method.ContainsKey (typeCode)) { | |||||
JTNE_0x81_Body.JTNE_0x81Method.Add (typeCode, type); | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -120,11 +111,9 @@ namespace JTNE.Protocol | |||||
/// <param name="typeCode">自定义类型编码</param> | /// <param name="typeCode">自定义类型编码</param> | ||||
/// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | /// <param name="type">继承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 DependerParamId, byte DependedParamId) { | |||||
if (!JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.ContainsKey (DependerParamId)) { | |||||
JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.Add (DependerParamId, DependedParamId); | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -134,11 +123,9 @@ namespace JTNE.Protocol | |||||
/// <param name="typeCode">自定义类型编码</param> | /// <param name="typeCode">自定义类型编码</param> | ||||
/// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs Register_JTNE0x82CustomBody(byte typeCode, Type type) | |||||
{ | |||||
if (!JTNE_0x82_Body.JTNE_0x82Method.ContainsKey(typeCode)) | |||||
{ | |||||
JTNE_0x82_Body.JTNE_0x82Method.Add(typeCode, type); | |||||
public JTNEGlobalConfigs Register_JTNE0x82CustomBody (byte typeCode, Type type) { | |||||
if (!JTNE_0x82_Body.JTNE_0x82Method.ContainsKey (typeCode)) { | |||||
JTNE_0x82_Body.JTNE_0x82Method.Add (typeCode, type); | |||||
} | } | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -148,8 +135,7 @@ namespace JTNE.Protocol | |||||
/// </summary> | /// </summary> | ||||
/// <param name="skipCRCCode"></param> | /// <param name="skipCRCCode"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs SetSkipCRCCode(bool skipCRCCode) | |||||
{ | |||||
public JTNEGlobalConfigs SetSkipCRCCode (bool skipCRCCode) { | |||||
instance.Value.SkipCRCCode = skipCRCCode; | instance.Value.SkipCRCCode = skipCRCCode; | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -158,8 +144,7 @@ namespace JTNE.Protocol | |||||
/// </summary> | /// </summary> | ||||
/// <param name="deviceMsgSNDistributed"></param> | /// <param name="deviceMsgSNDistributed"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs SetDeviceMsgSNDistributed(IDeviceMsgSNDistributed deviceMsgSNDistributed) | |||||
{ | |||||
public JTNEGlobalConfigs SetDeviceMsgSNDistributed (IDeviceMsgSNDistributed deviceMsgSNDistributed) { | |||||
instance.Value.DeviceMsgSNDistributed = deviceMsgSNDistributed; | instance.Value.DeviceMsgSNDistributed = deviceMsgSNDistributed; | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -168,8 +153,7 @@ namespace JTNE.Protocol | |||||
/// </summary> | /// </summary> | ||||
/// <param name="platformMsgSNDistributed"></param> | /// <param name="platformMsgSNDistributed"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs SetPlatformMsgSNDistributed(IPlatformMsgSNDistributed platformMsgSNDistributed) | |||||
{ | |||||
public JTNEGlobalConfigs SetPlatformMsgSNDistributed (IPlatformMsgSNDistributed platformMsgSNDistributed) { | |||||
instance.Value.PlatformMsgSNDistributed = platformMsgSNDistributed; | instance.Value.PlatformMsgSNDistributed = platformMsgSNDistributed; | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -178,8 +162,7 @@ namespace JTNE.Protocol | |||||
/// </summary> | /// </summary> | ||||
/// <param name="dataBodiesEncrypt"></param> | /// <param name="dataBodiesEncrypt"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs SetDataBodiesEncrypt(Func<byte, IJTNEEncrypt> dataBodiesEncrypt) | |||||
{ | |||||
public JTNEGlobalConfigs SetDataBodiesEncrypt (Func<JTNEEncryptMethod, IJTNEEncrypt> dataBodiesEncrypt) { | |||||
instance.Value.DataBodiesEncrypt = dataBodiesEncrypt; | instance.Value.DataBodiesEncrypt = dataBodiesEncrypt; | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
@@ -188,10 +171,9 @@ namespace JTNE.Protocol | |||||
/// </summary> | /// </summary> | ||||
/// <param name="platformLoginEncrypt"></param> | /// <param name="platformLoginEncrypt"></param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public JTNEGlobalConfigs SetPlatformLoginEncrypt(Func<byte, IJTNEEncrypt> platformLoginEncrypt) | |||||
{ | |||||
public JTNEGlobalConfigs SetPlatformLoginEncrypt (Func<JTNEEncryptMethod, IJTNEEncrypt> platformLoginEncrypt) { | |||||
instance.Value.PlatformLoginEncrypt = platformLoginEncrypt; | instance.Value.PlatformLoginEncrypt = platformLoginEncrypt; | ||||
return instance.Value; | return instance.Value; | ||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -1,4 +1,5 @@ | |||||
using JTNE.Protocol.Attributes; | using JTNE.Protocol.Attributes; | ||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Formatters; | using JTNE.Protocol.Formatters; | ||||
using System; | using System; | ||||
using System.IO; | using System.IO; | ||||
@@ -40,7 +41,7 @@ namespace JTNE.Protocol | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | /// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | ||||
/// <see cref="JTNE.Protocol.Enums.JTNEEncryptMethod"/> | /// <see cref="JTNE.Protocol.Enums.JTNEEncryptMethod"/> | ||||
/// </summary> | /// </summary> | ||||
public byte EncryptMethod { get; set; } = 0x01; | |||||
public JTNEEncryptMethod EncryptMethod { get; set; } = JTNEEncryptMethod.None; | |||||
/// <summary> | /// <summary> | ||||
/// 数据单元长度是数据单元的总字节数,有效值范围:0-65531 | /// 数据单元长度是数据单元的总字节数,有效值范围:0-65531 | ||||
/// </summary> | /// </summary> | ||||
@@ -1,7 +1,9 @@ | |||||
using JTNE.Protocol.Attributes; | using JTNE.Protocol.Attributes; | ||||
using JTNE.Protocol.Enums; | |||||
using JTNE.Protocol.Formatters.MessageBodyFormatters; | using JTNE.Protocol.Formatters.MessageBodyFormatters; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.ComponentModel; | |||||
using System.Text; | using System.Text; | ||||
namespace JTNE.Protocol.MessageBody | namespace JTNE.Protocol.MessageBody | ||||
@@ -34,6 +36,7 @@ namespace JTNE.Protocol.MessageBody | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | /// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | ||||
/// <see cref="JTNE.Protocol.Enums.JTNEEncryptMethod"/> | /// <see cref="JTNE.Protocol.Enums.JTNEEncryptMethod"/> | ||||
/// </summary> | /// </summary> | ||||
public byte EncryptMethod { get; set; } = 0x01; | |||||
[DefaultValue(JTNEEncryptMethod.None)] | |||||
public JTNEEncryptMethod EncryptMethod { get; set; } = JTNEEncryptMethod.None; | |||||
} | } | ||||
} | } |