@@ -34,8 +34,8 @@ namespace JTNE.Protocol.Benchmark | |||
for (int i = 0; i < N; i++) | |||
{ | |||
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"; | |||
JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | |||
jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | |||
@@ -13,7 +13,7 @@ namespace JTNE.Protocol.Test.Extensions | |||
[Fact] | |||
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"), | |||
LoginNum = 1, | |||
@@ -21,7 +21,7 @@ namespace JTNE.Protocol.Test { | |||
JTNEHeaderPackage jTNEHeaderPackage = new JTNEHeaderPackage (); | |||
jTNEHeaderPackage.VIN = "123456789"; | |||
jTNEHeaderPackage.AskId = JTNEAskId.CMD.ToByteValue (); | |||
jTNEHeaderPackage.MsgId = JTNEMsgId.login.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; | |||
@@ -42,7 +42,7 @@ namespace JTNE.Protocol.Test { | |||
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 (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); | |||
@@ -60,8 +60,8 @@ namespace JTNE.Protocol.Test { | |||
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 (JTNEAskId.CMD, package.AskId); | |||
Assert.Equal (JTNEMsgId.PlatformLogin, package.MsgId); | |||
Assert.Equal (41, package.DataUnitLength); | |||
Assert.NotNull (package.Bodies); | |||
@@ -75,5 +75,29 @@ namespace JTNE.Protocol.Test { | |||
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() | |||
{ | |||
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"; | |||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | |||
jTNE_0X01.PDATime = DateTime.Parse("2019-01-22 23:55:56"); | |||
@@ -39,8 +39,8 @@ namespace JTNE.Protocol.Test.Package | |||
{ | |||
var data = "232301FE313233343536373839000000000000000001002A130116173738000131323334353637383939383736353433323130300304313233343435363739383730FD".ToHexBytes(); | |||
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); | |||
JTNE_0x01 jTNE_0X01 = jTNEPackage.Bodies as JTNE_0x01; | |||
@@ -68,8 +68,8 @@ namespace JTNE.Protocol.Test.Package | |||
} | |||
}); | |||
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.EncryptMethod = JTNEEncryptMethod.AES128; | |||
JTNE_0x01 jTNE_0X01 = new JTNE_0x01(); | |||
@@ -103,8 +103,8 @@ namespace JTNE.Protocol.Test.Package | |||
}); | |||
var data = "232301FE31323334353637383900000000000000000300307C9AAF67FB9408A75FAFC1C87F1E2AECD79DDAB8219016A5DD0911283922805EF450045EA3611C0D5CFBFD8F2581CEED30".ToHexBytes(); | |||
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(JTNEEncryptMethod.AES128, jTNEPackage.EncryptMethod); | |||
@@ -15,8 +15,8 @@ namespace JTNE.Protocol.Test.Package | |||
public void Test1() | |||
{ | |||
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"; | |||
JTNE_0x02 jTNE_0X02 = new JTNE_0x02(); | |||
jTNE_0X02.Values = new Dictionary<byte, JTNE_0x02_Body>(); | |||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||
public void Test1() | |||
{ | |||
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"; | |||
JTNE_0x04 jTNE_0X04 = new JTNE_0x04(); | |||
jTNE_0X04.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | |||
@@ -30,8 +30,8 @@ namespace JTNE.Protocol.Test.Package | |||
{ | |||
var data = "232304FE31323334353637383900000000000000000100081301171737380001DE".ToHexBytes(); | |||
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); | |||
JTNE_0x04 jTNE_0X04 = jTNEPackage.Bodies as JTNE_0x04; | |||
Assert.Equal(DateTime.Parse("2019-01-23 23:55:56"), jTNE_0X04.LogoutTime); | |||
@@ -11,8 +11,8 @@ namespace JTNE.Protocol.Test.Package { | |||
[Fact] | |||
public void Test1 () { | |||
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"; | |||
JTNE_0x05 jTNE_0X05 = new JTNE_0x05 (); | |||
jTNE_0X05.LoginTime = DateTime.Parse ("2019-01-23 23:55:56"); | |||
@@ -28,8 +28,8 @@ namespace JTNE.Protocol.Test.Package { | |||
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 (JTNEAskId.CMD, jTNEPackage.AskId); | |||
Assert.Equal (JTNEMsgId.PlatformLogin, jTNEPackage.MsgId); | |||
Assert.Equal ("123456789", jTNEPackage.VIN); | |||
JTNE_0x05 jTNE_0X05 = jTNEPackage.Bodies as JTNE_0x05; | |||
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() | |||
{ | |||
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"; | |||
JTNE_0x06 jTNE_0X06 = new JTNE_0x06(); | |||
jTNE_0X06.LogoutTime = DateTime.Parse("2019-01-23 23:55:56"); | |||
@@ -30,8 +30,8 @@ namespace JTNE.Protocol.Test.Package | |||
{ | |||
var data = "232306FE31323334353637383900000000000000000100081301171737380001DC".ToHexBytes(); | |||
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); | |||
JTNE_0x06 jTNE_0X06 = jTNEPackage.Bodies as JTNE_0x06; | |||
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() | |||
{ | |||
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"; | |||
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | |||
Assert.Equal("232307FE3132333435363738390000000000000000010000C9", hex); | |||
@@ -26,8 +26,8 @@ namespace JTNE.Protocol.Test.Package | |||
{ | |||
var data = "232307FE3132333435363738390000000000000000010000C9".ToHexBytes(); | |||
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.Null(jTNEPackage.Bodies); | |||
} | |||
@@ -14,8 +14,8 @@ namespace JTNE.Protocol.Test.Package | |||
public void Test1() | |||
{ | |||
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"; | |||
var hex = JTNESerializer.Serialize(jTNEPackage).ToHexString(); | |||
Assert.Equal("232308FE3132333435363738390000000000000000010000C6", hex); | |||
@@ -26,8 +26,8 @@ namespace JTNE.Protocol.Test.Package | |||
{ | |||
var data = "232308FE3132333435363738390000000000000000010000C6".ToHexBytes(); | |||
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.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> | |||
public enum JTNEAskId:byte | |||
{ | |||
public enum JTNEAskId : byte { | |||
/// <summary> | |||
/// 接收到的信息正确 | |||
/// </summary> | |||
Success=0x01, | |||
Success = 0x01, | |||
/// <summary> | |||
/// 设置未成功 | |||
/// </summary> | |||
Error=0x02, | |||
Error = 0x02, | |||
/// <summary> | |||
/// VIN重复错误 | |||
/// </summary> | |||
VinRepeatError=0x03, | |||
VinRepeatError = 0x03, | |||
/// <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.Text; | |||
using JTNE.Protocol.Attributes; | |||
using JTNE.Protocol.MessageBody; | |||
namespace JTNE.Protocol.Enums | |||
{ | |||
namespace JTNE.Protocol.Enums { | |||
/// <summary> | |||
/// 命令单元 | |||
/// </summary> | |||
public enum JTNEMsgId:byte | |||
{ | |||
public enum JTNEMsgId : byte { | |||
/// <summary> | |||
/// 车辆登入 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x01))] | |||
login = 0x01, | |||
[JTNEBodiesType (typeof (JTNE_0x01))] | |||
Login = 0x01, | |||
/// <summary> | |||
/// 实时信息上传 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x02))] | |||
uploadim = 0x02, | |||
[JTNEBodiesType (typeof (JTNE_0x02))] | |||
UploadIM = 0x02, | |||
/// <summary> | |||
/// 补传信息上传 | |||
/// </summary> | |||
uploadsup = 0x03, | |||
UploadSup = 0x03, | |||
/// <summary> | |||
/// 车辆登出 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x04))] | |||
loginout = 0x04, | |||
[JTNEBodiesType (typeof (JTNE_0x04))] | |||
Logout = 0x04, | |||
/// <summary> | |||
/// 平台登入 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x05))] | |||
platformlogin = 0x05, | |||
[JTNEBodiesType (typeof (JTNE_0x05))] | |||
PlatformLogin = 0x05, | |||
/// <summary> | |||
/// 平台登出 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x06))] | |||
platformlogout = 0x06, | |||
[JTNEBodiesType (typeof (JTNE_0x06))] | |||
PlatformLogout = 0x06, | |||
/// <summary> | |||
/// 心跳 | |||
/// 心跳包 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x07))] | |||
heartbeat = 0x07, | |||
[JTNEBodiesType (typeof (JTNE_0x07))] | |||
HeartBeat = 0x07, | |||
/// <summary> | |||
/// 终端校时 | |||
/// </summary> | |||
[JTNEBodiesType(typeof(JTNE_0x08))] | |||
checktime = 0x08, | |||
[JTNEBodiesType (typeof (JTNE_0x08))] | |||
CheckTime = 0x08, | |||
/// <summary> | |||
/// 查询命令 | |||
/// </summary> | |||
query = 0x80, | |||
Query = 0x80, | |||
/// <summary> | |||
/// 设置命令 | |||
/// </summary> | |||
settings = 0x81, | |||
Settings = 0x81, | |||
/// <summary> | |||
/// 控制命令 | |||
/// </summary> | |||
control = 0x82 | |||
Control = 0x82 | |||
} | |||
} | |||
} |
@@ -4,22 +4,19 @@ using System.ComponentModel; | |||
using System.Linq; | |||
using System.Reflection; | |||
namespace JTNE.Protocol.Extensions | |||
{ | |||
namespace JTNE.Protocol.Extensions { | |||
/// <summary> | |||
/// 枚举扩展 | |||
/// </summary> | |||
public static class JT808EnumExtensions | |||
{ | |||
public static class JT808EnumExtensions { | |||
/// <summary> | |||
/// 转为整型 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="t"></param> | |||
/// <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> | |||
@@ -28,9 +25,8 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="t"></param> | |||
/// <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> | |||
@@ -39,9 +35,8 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="t"></param> | |||
/// <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> | |||
@@ -50,9 +45,8 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="t"></param> | |||
/// <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> | |||
@@ -61,18 +55,16 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="value"></param> | |||
/// <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> | |||
/// <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> | |||
@@ -80,10 +72,9 @@ namespace JTNE.Protocol.Extensions | |||
/// </summary> | |||
/// <param name="value"></param> | |||
/// <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> | |||
@@ -92,24 +83,21 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="TEnum"></typeparam> | |||
/// <param name="enumValue"></param> | |||
/// <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> | |||
/// 获取DescriptionAttribute特性枚举及描述 | |||
/// </summary> | |||
/// <param name="type"></param> | |||
/// <param name="value"></param> | |||
/// <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; | |||
} | |||
@@ -117,27 +105,24 @@ namespace JTNE.Protocol.Extensions | |||
/// <summary> | |||
/// 获取DisplayNameAttribute特性枚举值的描述 | |||
/// </summary> | |||
/// <param name="obj">枚举值</param> | |||
/// <param name="value">枚举值</param> | |||
/// <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> | |||
/// 获取DisplayNameAttribute特性枚举及描述 | |||
/// </summary> | |||
/// <param name="type"></param> | |||
/// <param name="value"></param> | |||
/// <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; | |||
} | |||
@@ -148,17 +133,13 @@ namespace JTNE.Protocol.Extensions | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="value"></param> | |||
/// <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; | |||
} | |||
} | |||
@@ -171,37 +152,29 @@ namespace JTNE.Protocol.Extensions | |||
/// <param name="digit">位数(8,16,32)</param> | |||
/// <param name="ignoreUnknown">是否忽略未知数据</param> | |||
/// <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; | |||
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; | |||
} | |||
} | |||
} | |||
return results; | |||
} | |||
else | |||
{ | |||
} else { | |||
return values; | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -1,15 +1,13 @@ | |||
using JTNE.Protocol.Enums; | |||
using System; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Text; | |||
using JTNE.Protocol.Enums; | |||
namespace JTNE.Protocol.Extensions | |||
{ | |||
namespace JTNE.Protocol.Extensions { | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public static class JTNEPackageExtensions | |||
{ | |||
public static class JTNEPackageExtensions { | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
@@ -19,12 +17,11 @@ namespace JTNE.Protocol.Extensions | |||
/// <param name="vin"></param> | |||
/// <param name="bodies"></param> | |||
/// <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.VIN = vin; | |||
return jTNEPackage; | |||
@@ -37,11 +34,10 @@ namespace JTNE.Protocol.Extensions | |||
/// <param name="vin"></param> | |||
/// <param name="askId"></param> | |||
/// <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; | |||
return jTNEPackage; | |||
} | |||
@@ -55,12 +51,11 @@ namespace JTNE.Protocol.Extensions | |||
/// <param name="askId"></param> | |||
/// <param name="bodies"></param> | |||
/// <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.VIN = vin; | |||
return jTNEPackage; | |||
@@ -73,13 +68,12 @@ namespace JTNE.Protocol.Extensions | |||
/// <param name="askId"></param> | |||
/// <param name="vin"></param> | |||
/// <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; | |||
return jTNEPackage; | |||
} | |||
} | |||
} | |||
} |
@@ -26,9 +26,9 @@ namespace JTNE.Protocol.Formatters { | |||
JTNEPackage jTNEPackage = new JTNEPackage (); | |||
offset += 2; | |||
// 3.命令标识 | |||
jTNEPackage.MsgId = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||
jTNEPackage.MsgId = (JTNEMsgId)JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||
// 4.应答标识 | |||
jTNEPackage.AskId = JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||
jTNEPackage.AskId = (JTNEAskId)JTNEBinaryExtensions.ReadByteLittle (bytes, ref offset); | |||
// 5.VIN | |||
jTNEPackage.VIN = JTNEBinaryExtensions.ReadStringLittle (bytes, ref offset, 17); | |||
// 6.数据加密方式 | |||
@@ -39,7 +39,7 @@ namespace JTNE.Protocol.Formatters { | |||
// 8.1.根据数据加密方式进行解码 | |||
// 8.2.解析出对应数据体 | |||
if (jTNEPackage.DataUnitLength > 0) { | |||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (jTNEPackage.MsgId); | |||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId ((byte)jTNEPackage.MsgId); | |||
if (jTNEBodiesImplType != null) { | |||
int bodyReadSize = 0; | |||
try { | |||
@@ -76,9 +76,9 @@ namespace JTNE.Protocol.Formatters { | |||
// 2.起始符2 | |||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.BeginFlag2); | |||
// 3.命令标识 | |||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.MsgId); | |||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, (byte)value.MsgId); | |||
// 4.应答标识 | |||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, value.AskId); | |||
offset += JTNEBinaryExtensions.WriteByteLittle (bytes, offset, (byte)value.AskId); | |||
// 5.VIN | |||
offset += JTNEBinaryExtensions.WriteStringPadRightLittle (bytes, offset, value.VIN, 17); | |||
// 6.数据加密方式 | |||
@@ -86,7 +86,7 @@ namespace JTNE.Protocol.Formatters { | |||
// 7.记录当前偏移量 | |||
int tmpOffset = offset; | |||
// 8.数据体 | |||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId (value.MsgId); | |||
Type jTNEBodiesImplType = JTNEMsgIdFactory.GetBodiesImplTypeByMsgId ((byte)value.MsgId); | |||
int messageBodyOffset = 0; | |||
if (jTNEBodiesImplType != 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.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 | |||
map[msgId] = typeof(TJTNEBodies); | |||
map[msgId] = typeof (TJTNEBodies); | |||
} | |||
} | |||
} | |||
} |
@@ -21,9 +21,9 @@ namespace JTNE.Protocol { | |||
} | |||
/// <summary> | |||
/// 字符串编码,默认 GB18030 | |||
/// 字符串编码 | |||
/// </summary> | |||
public Encoding Encoding { get; set;} | |||
public Encoding Encoding { get; set; } | |||
/// <summary> | |||
/// | |||
@@ -41,35 +41,40 @@ namespace JTNE.Protocol { | |||
/// 平台流水号 | |||
/// </summary> | |||
public IPlatformMsgSNDistributed PlatformMsgSNDistributed { get; private set; } | |||
/// <summary> | |||
/// 跳过校验码 | |||
/// 测试的时候需要手动修改值,避免验证 | |||
/// 默认:false | |||
/// </summary> | |||
public bool SkipCRCCode { get; private set; } | |||
/// <summary> | |||
/// 消息数据体加密算法 | |||
/// RSA=>IJTNEEncryptImpl | |||
/// AES=>IJTNEEncryptImpl | |||
/// </summary> | |||
public Func<JTNEEncryptMethod, IJTNEEncrypt> DataBodiesEncrypt { get; private set; } | |||
/// <summary> | |||
/// 平台登入加密算法 | |||
/// RSA=>IJTNEEncryptImpl | |||
/// AES=>IJTNEEncryptImpl | |||
/// </summary> | |||
public Func<JTNEEncryptMethod, IJTNEEncrypt> PlatformLoginEncrypt { get; private set; } | |||
/// <summary> | |||
/// 注册自定义消息 | |||
/// </summary> | |||
/// <typeparam name="TJTNEBodies"></typeparam> | |||
/// <param name="msgId"></param> | |||
/// <param name="customMsgId"></param> | |||
/// <returns></returns> | |||
public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies> (byte customMsgId) | |||
where TJTNEBodies : JTNEBodies { | |||
JTNEMsgIdFactory.SetMap<TJTNEBodies> (customMsgId); | |||
return instance.Value; | |||
} | |||
/// <summary> | |||
/// 重写消息 | |||
/// </summary> | |||
@@ -93,6 +98,7 @@ namespace JTNE.Protocol { | |||
} | |||
return instance.Value; | |||
} | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
@@ -108,12 +114,12 @@ namespace JTNE.Protocol { | |||
/// <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> | |||
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; | |||
} | |||
@@ -26,12 +26,12 @@ namespace JTNE.Protocol | |||
/// 命令标识 | |||
/// <see cref="JTNE.Protocol.Enums.JTNEMsgId"/> | |||
/// </summary> | |||
public byte MsgId { get; set; } | |||
public JTNEMsgId MsgId { get; set; } | |||
/// <summary> | |||
/// 应答标志 | |||
/// <see cref="JTNE.Protocol.Enums.JTNEAskId"/> | |||
/// </summary> | |||
public byte AskId { get; set; } | |||
public JTNEAskId AskId { get; set; } | |||
/// <summary> | |||
/// 车辆识别码 | |||
/// </summary> | |||
@@ -1,52 +1,42 @@ | |||
using JTNE.Protocol.Extensions; | |||
using System; | |||
using System; | |||
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> | |||
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; | |||
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); | |||
} | |||
} | |||
} | |||
} |