@@ -59,7 +59,7 @@ JT808Package jT808Package = new JT808Package(); | |||||
jT808Package.Header = new JT808Header | jT808Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.位置信息汇报, | MsgId = Enums.JT808MsgId.位置信息汇报, | ||||
MsgNum = 126, | |||||
ManualMsgNum = 126, | |||||
TerminalPhoneNo = "123456789012" | TerminalPhoneNo = "123456789012" | ||||
}; | }; | ||||
@@ -197,8 +197,8 @@ var hex = data.ToHexString(); | |||||
``` config | ``` config | ||||
// 初始化配置 | // 初始化配置 | ||||
IJT808Config DT1JT808Config = new DefaultGlobalConfig(); | |||||
IJT808Config DT2JT808Config = new DefaultGlobalConfig(); | |||||
IJT808Config DT1JT808Config = new DT1Config(); | |||||
IJT808Config DT2JT808Config = new DT2Config(); | |||||
// 注册自定义消息外部程序集 | // 注册自定义消息外部程序集 | ||||
DT1JT808Config.Register(Assembly.GetExecutingAssembly()); | DT1JT808Config.Register(Assembly.GetExecutingAssembly()); | ||||
// 跳过校验和验证 | // 跳过校验和验证 | ||||
@@ -0,0 +1,49 @@ | |||||
using JT808.Protocol.Interfaces; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
namespace JT808.Protocol.Test | |||||
{ | |||||
public class DependencyInjectionExtensionsTest | |||||
{ | |||||
[Fact] | |||||
public void Test1() | |||||
{ | |||||
IServiceCollection serviceDescriptors = new ServiceCollection(); | |||||
//1 | |||||
serviceDescriptors.AddJT808Configure<DT1Config>() | |||||
.AddJT808Configure<DT2Config>(); | |||||
IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider(); | |||||
//使用实例的方式获取 | |||||
IJT808Config DT1JT808Config = serviceProvider.GetRequiredService<DT1Config>(); | |||||
IJT808Config DT2JT808Config = serviceProvider.GetRequiredService<DT2Config>(); | |||||
Assert.Equal("DT1", DT1JT808Config.ConfigId); | |||||
Assert.Equal("DT2", DT2JT808Config.ConfigId); | |||||
} | |||||
[Fact] | |||||
public void Test2() | |||||
{ | |||||
IServiceCollection serviceDescriptors = new ServiceCollection(); | |||||
serviceDescriptors.AddJT808Configure(new DT1Config()) | |||||
.AddJT808Configure(new DT2Config()); | |||||
IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider(); | |||||
//使用实例的方式获取 | |||||
IJT808Config DT1JT808Config = serviceProvider.GetRequiredService<DT1Config>(); | |||||
IJT808Config DT2JT808Config = serviceProvider.GetRequiredService<DT2Config>(); | |||||
Assert.Equal("DT1", DT1JT808Config.ConfigId); | |||||
Assert.Equal("DT2", DT2JT808Config.ConfigId); | |||||
} | |||||
public class DT1Config : GlobalConfigBase | |||||
{ | |||||
public override string ConfigId { get; protected set; } = "DT1"; | |||||
} | |||||
public class DT2Config : GlobalConfigBase | |||||
{ | |||||
public override string ConfigId { get; protected set; } = "DT2"; | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
using JT808.Protocol.Interfaces; | |||||
using JT808.Protocol.Internal; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
namespace JT808.Protocol.Test.Internal | |||||
{ | |||||
public class JT808MsgSNDistributedTest | |||||
{ | |||||
[Fact] | |||||
public void Test1() | |||||
{ | |||||
IJT808MsgSNDistributed JT808MsgSNDistributed = new DefaultMsgSNDistributedImpl(); | |||||
var a=JT808MsgSNDistributed.Increment("1234"); | |||||
Assert.Equal(1, a); | |||||
var a1 = JT808MsgSNDistributed.Increment("1234"); | |||||
Assert.Equal(2, a1); | |||||
} | |||||
} | |||||
} |
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(), | ||||
MsgNum = 1203, | |||||
ManualMsgNum = 1203, | |||||
TerminalPhoneNo = "012345678900", | TerminalPhoneNo = "012345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x0001 | Bodies = new JT808_0x0001 | ||||
@@ -18,7 +18,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
} | } | ||||
}; | }; | ||||
@@ -57,7 +57,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies= new JT808_0x0002() | Bodies= new JT808_0x0002() | ||||
@@ -14,7 +14,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注销.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注销.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
} | } | ||||
}; | }; | ||||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
}, | }, | ||||
Bodies = new JT808_0x0100 | Bodies = new JT808_0x0100 | ||||
@@ -62,7 +62,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注册.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
ProtocolVersion=1, | ProtocolVersion=1, | ||||
}, | }, | ||||
@@ -59,7 +59,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端鉴权.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端鉴权.ToUInt16Value(), | ||||
MsgNum = 12345, | |||||
ManualMsgNum = 12345, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x0102 | Bodies = new JT808_0x0102 | ||||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
}, | }, | ||||
Bodies = new JT808_0x0104 | Bodies = new JT808_0x0104 | ||||
@@ -65,7 +65,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
}, | }, | ||||
Bodies = new JT808_0x0104 | Bodies = new JT808_0x0104 | ||||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.查询终端属性应答.ToUInt16Value(), | ||||
MsgNum = 8888, | |||||
ManualMsgNum = 8888, | |||||
TerminalPhoneNo = "112233445566", | TerminalPhoneNo = "112233445566", | ||||
} | } | ||||
}; | }; | ||||
@@ -65,7 +65,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
jT808Package.Header = new JT808Header | jT808Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | ||||
MsgNum = (ushort)i, | |||||
ManualMsgNum = (ushort)i, | |||||
TerminalPhoneNo = "1122334455"+i.ToString(), | TerminalPhoneNo = "1122334455"+i.ToString(), | ||||
}; | }; | ||||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 | ||||
@@ -300,7 +300,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
jT808Package.Header = new JT808Header | jT808Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | ||||
MsgNum = 8888, | |||||
ManualMsgNum = 8888, | |||||
TerminalPhoneNo = "112233445566", | TerminalPhoneNo = "112233445566", | ||||
}; | }; | ||||
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200(); | JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200(); | ||||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.位置信息查询应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.位置信息查询应答.ToUInt16Value(), | ||||
MsgNum = 8888, | |||||
ManualMsgNum = 8888, | |||||
TerminalPhoneNo = "112233445566", | TerminalPhoneNo = "112233445566", | ||||
} | } | ||||
}; | }; | ||||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.车辆控制应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.车辆控制应答.ToUInt16Value(), | ||||
MsgNum = 8888, | |||||
ManualMsgNum = 8888, | |||||
TerminalPhoneNo = "112233445566", | TerminalPhoneNo = "112233445566", | ||||
} | } | ||||
}; | }; | ||||
@@ -17,7 +17,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.定位数据批量上传.ToUInt16Value(), | MsgId = Enums.JT808MsgId.定位数据批量上传.ToUInt16Value(), | ||||
MsgNum = 8888, | |||||
ManualMsgNum = 8888, | |||||
TerminalPhoneNo = "112233445566", | TerminalPhoneNo = "112233445566", | ||||
} | } | ||||
}; | }; | ||||
@@ -26,7 +26,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.数据上行透传.ToUInt16Value(), | MsgId = Enums.JT808MsgId.数据上行透传.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
}, | }, | ||||
Bodies = new JT808_0x0900 | Bodies = new JT808_0x0900 | ||||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.平台通用应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.平台通用应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x8001 | Bodies = new JT808_0x8001 | ||||
@@ -15,7 +15,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "012345678900", | TerminalPhoneNo = "012345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x8100 | Bodies = new JT808_0x8100 | ||||
@@ -62,7 +62,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x8100 | Bodies = new JT808_0x8100 | ||||
@@ -109,7 +109,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端注册应答.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x8100 | Bodies = new JT808_0x8100 | ||||
@@ -27,7 +27,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.设置终端参数.ToUInt16Value(), | MsgId = Enums.JT808MsgId.设置终端参数.ToUInt16Value(), | ||||
MsgNum = 10, | |||||
ManualMsgNum = 10, | |||||
TerminalPhoneNo = "123456789", | TerminalPhoneNo = "123456789", | ||||
}, | }, | ||||
Bodies = new JT808_0x8103 | Bodies = new JT808_0x8103 | ||||
@@ -14,7 +14,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.查询终端参数.ToUInt16Value(), | MsgId = Enums.JT808MsgId.查询终端参数.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
} | } | ||||
}; | }; | ||||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}, | }, | ||||
Bodies = new JT808_0x8105 | Bodies = new JT808_0x8105 | ||||
@@ -78,7 +78,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
jT808Package.Header = new JT808Header | jT808Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | MsgId = Enums.JT808MsgId.终端控制.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "12345678900", | TerminalPhoneNo = "12345678900", | ||||
}; | }; | ||||
jT808Package.Bodies = new JT808_0x8105 | jT808Package.Bodies = new JT808_0x8105 | ||||
@@ -16,7 +16,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
Header = new JT808Header | Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "012345678900", | TerminalPhoneNo = "012345678900", | ||||
} | } | ||||
}; | }; | ||||
@@ -51,7 +51,7 @@ namespace JT808.Protocol.Test.MessageBody | |||||
{ | { | ||||
MessageBodyProperty = jT808HeaderMessageBodyProperty, | MessageBodyProperty = jT808HeaderMessageBodyProperty, | ||||
MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | MsgId = Enums.JT808MsgId.文本信息下发.ToUInt16Value(), | ||||
MsgNum = 1, | |||||
ManualMsgNum = 1, | |||||
TerminalPhoneNo = "012345678900", | TerminalPhoneNo = "012345678900", | ||||
} | } | ||||
}; | }; | ||||
@@ -27,7 +27,7 @@ namespace JT808.Protocol.Test.Simples | |||||
jT808Package.Header = new JT808Header | jT808Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | MsgId = Enums.JT808MsgId.位置信息汇报.ToUInt16Value(), | ||||
MsgNum = 126, | |||||
ManualMsgNum = 126, | |||||
TerminalPhoneNo = "123456789012" | TerminalPhoneNo = "123456789012" | ||||
}; | }; | ||||
@@ -40,7 +40,7 @@ namespace JT808.Protocol.Test.Simples | |||||
{ JT808Constants.JT808_0x0200_0x02,new JT808_0x0200_0x02{Oil = 125}} | { JT808Constants.JT808_0x0200_0x02,new JT808_0x0200_0x02{Oil = 125}} | ||||
} | } | ||||
}); | }); | ||||
jT808Package.Header.MsgNum = 1; | |||||
jT808Package.Header.ManualMsgNum = 1; | |||||
byte[] data = JT808Serializer.Serialize(jT808Package); | byte[] data = JT808Serializer.Serialize(jT808Package); | ||||
var hex = data.ToHexString(); | var hex = data.ToHexString(); | ||||
//输出结果Hex: | //输出结果Hex: | ||||
@@ -94,7 +94,7 @@ namespace JT808.Protocol.Test.Simples | |||||
dt1Package.Header = new JT808Header | dt1Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = 0x91, | MsgId = 0x91, | ||||
MsgNum = 126, | |||||
ManualMsgNum = 126, | |||||
TerminalPhoneNo = "1234567891" | TerminalPhoneNo = "1234567891" | ||||
}; | }; | ||||
DT1Demo6 dT1Demo6 = new DT1Demo6(); | DT1Demo6 dT1Demo6 = new DT1Demo6(); | ||||
@@ -106,7 +106,7 @@ namespace JT808.Protocol.Test.Simples | |||||
dt2Package.Header = new JT808Header | dt2Package.Header = new JT808Header | ||||
{ | { | ||||
MsgId = 0x91, | MsgId = 0x91, | ||||
MsgNum = 126, | |||||
ManualMsgNum = 126, | |||||
TerminalPhoneNo = "1234567892" | TerminalPhoneNo = "1234567892" | ||||
}; | }; | ||||
DT2Demo6 dT2Demo6 = new DT2Demo6(); | DT2Demo6 dT2Demo6 = new DT2Demo6(); | ||||
@@ -28,7 +28,7 @@ namespace JT808.Protocol.Test.Simples | |||||
{ | { | ||||
Time = DateTime.Parse("2019-12-02 10:10:10"), | Time = DateTime.Parse("2019-12-02 10:10:10"), | ||||
}); | }); | ||||
jT808Package.Header.MsgNum = 1; | |||||
jT808Package.Header.ManualMsgNum = 1; | |||||
byte[] data = JT808Serializer.Serialize(jT808Package); | byte[] data = JT808Serializer.Serialize(jT808Package); | ||||
var hex = data.ToHexString(); | var hex = data.ToHexString(); | ||||
Assert.Equal("7E8004400601000000001234567890120001191202101010517E", hex); | Assert.Equal("7E8004400601000000001234567890120001191202101010517E", hex); | ||||
@@ -2,6 +2,6 @@ | |||||
{ | { | ||||
public interface IJT808MsgSNDistributed | public interface IJT808MsgSNDistributed | ||||
{ | { | ||||
ushort Increment(); | |||||
ushort Increment(string terminalPhoneNo); | |||||
} | } | ||||
} | } |
@@ -1,15 +1,21 @@ | |||||
using System.Threading; | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Threading; | |||||
using JT808.Protocol.Interfaces; | using JT808.Protocol.Interfaces; | ||||
namespace JT808.Protocol.Internal | namespace JT808.Protocol.Internal | ||||
{ | { | ||||
internal class DefaultMsgSNDistributedImpl : IJT808MsgSNDistributed | internal class DefaultMsgSNDistributedImpl : IJT808MsgSNDistributed | ||||
{ | { | ||||
int _counter = 0; | |||||
public ushort Increment() | |||||
ConcurrentDictionary<string, int> counterDict; | |||||
public DefaultMsgSNDistributedImpl() | |||||
{ | |||||
counterDict = new ConcurrentDictionary<string, int>(StringComparer.OrdinalIgnoreCase); | |||||
} | |||||
public ushort Increment(string terminalPhoneNo) | |||||
{ | { | ||||
return (ushort)Interlocked.Increment(ref _counter); | |||||
return (ushort)counterDict.AddOrUpdate(terminalPhoneNo, 1, (id, count) => count + 1); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -14,7 +14,7 @@ | |||||
<licenseUrl>https://github.com/SmallChi/JT808/blob/master/LICENSE</licenseUrl> | <licenseUrl>https://github.com/SmallChi/JT808/blob/master/LICENSE</licenseUrl> | ||||
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | <license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license> | ||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild> | <GeneratePackageOnBuild>false</GeneratePackageOnBuild> | ||||
<Version>2.2.2</Version> | |||||
<Version>2.2.3</Version> | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
@@ -3129,7 +3129,15 @@ | |||||
<summary> | <summary> | ||||
消息流水号 | 消息流水号 | ||||
发送计数器 | 发送计数器 | ||||
占用四个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
占用两个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | |||||
</summary> | |||||
</member> | |||||
<member name="P:JT808.Protocol.JT808Header.ManualMsgNum"> | |||||
<summary> | |||||
手动消息流水号(only test) | |||||
发送计数器 | |||||
占用两个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | 程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | ||||
</summary> | </summary> | ||||
</member> | </member> | ||||
@@ -30,11 +30,18 @@ namespace JT808.Protocol | |||||
/// <summary> | /// <summary> | ||||
/// 消息流水号 | /// 消息流水号 | ||||
/// 发送计数器 | /// 发送计数器 | ||||
/// 占用四个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
/// 占用两个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
/// 程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | /// 程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | ||||
/// </summary> | /// </summary> | ||||
public ushort MsgNum { get; set; } | public ushort MsgNum { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 手动消息流水号(only test) | |||||
/// 发送计数器 | |||||
/// 占用两个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。 | |||||
/// 程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零 | |||||
/// </summary> | |||||
public ushort? ManualMsgNum { get; set; } | |||||
/// <summary> | |||||
/// 消息总包数 | /// 消息总包数 | ||||
/// </summary> | /// </summary> | ||||
public ushort PackgeCount { get; set; } | public ushort PackgeCount { get; set; } | ||||
@@ -204,9 +204,17 @@ namespace JT808.Protocol | |||||
// 2.3.终端手机号 (写死大陆手机号码) | // 2.3.终端手机号 (写死大陆手机号码) | ||||
writer.WriteBCD(value.Header.TerminalPhoneNo, config.TerminalPhoneNoLength); | writer.WriteBCD(value.Header.TerminalPhoneNo, config.TerminalPhoneNoLength); | ||||
} | } | ||||
value.Header.MsgNum = value.Header.MsgNum > 0 ? value.Header.MsgNum : config.MsgSNDistributed.Increment(); | |||||
// 2.4.消息流水号 | |||||
writer.WriteUInt16(value.Header.MsgNum); | |||||
if (value.Header.ManualMsgNum.HasValue) | |||||
{ | |||||
// 2.4.消息流水号 | |||||
writer.WriteUInt16(value.Header.ManualMsgNum.Value); | |||||
} | |||||
else | |||||
{ | |||||
// 2.4.消息流水号 | |||||
value.Header.MsgNum = config.MsgSNDistributed.Increment(value.Header.TerminalPhoneNo); | |||||
writer.WriteUInt16(value.Header.MsgNum); | |||||
} | |||||
// 2.5.判断是否分包 | // 2.5.判断是否分包 | ||||
if (value.Header.MessageBodyProperty.IsPackage) | if (value.Header.MessageBodyProperty.IsPackage) | ||||
{ | { | ||||