瀏覽代碼

修复序列化时流水号未从0开始

tags/v2.6.2
yedajiang44 2 年之前
父節點
當前提交
a9d49dd25f
共有 3 個文件被更改,包括 9 次插入13 次删除
  1. +5
    -8
      src/JT808.Protocol/Internal/DefaultMsgSNDistributedImpl.cs
  2. +3
    -3
      src/JT808.Protocol/JT808Header.cs
  3. +1
    -2
      src/JT808.Protocol/JT808Package.cs

+ 5
- 8
src/JT808.Protocol/Internal/DefaultMsgSNDistributedImpl.cs 查看文件

@@ -1,21 +1,18 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading;
using System.Collections.Concurrent;
using JT808.Protocol.Interfaces;

namespace JT808.Protocol.Internal
{
internal class DefaultMsgSNDistributedImpl : IJT808MsgSNDistributed
{
ConcurrentDictionary<string, ushort> counterDict;
readonly ConcurrentDictionary<string, ushort> counterDict;
public DefaultMsgSNDistributedImpl()
{
counterDict = new ConcurrentDictionary<string, ushort>(StringComparer.OrdinalIgnoreCase);
}
public ushort Increment(string terminalPhoneNo)
{
if (counterDict.TryGetValue(terminalPhoneNo, out ushort value))
if (counterDict.TryGetValue(terminalPhoneNo, out ushort value))
{
ushort newValue = ++value;
counterDict.TryUpdate(terminalPhoneNo, newValue, value);
@@ -23,8 +20,8 @@ namespace JT808.Protocol.Internal
}
else
{
counterDict.TryAdd(terminalPhoneNo, 1);
return 1;
counterDict.TryAdd(terminalPhoneNo, 0);
return 0;
}
}
}


+ 3
- 3
src/JT808.Protocol/JT808Header.cs 查看文件

@@ -26,14 +26,14 @@ namespace JT808.Protocol
/// 根据安装后终端自身的手机号转换。手机号不足 12 位,则在前补充数字,大陆手机号补充数字 0,港澳台则根据其区号进行位数补充
/// (2019版本)手机号不足 20 位,则在前补充数字 0
/// </summary>
public string TerminalPhoneNo { get; set; }
public string TerminalPhoneNo { get; set; }
/// <summary>
/// 消息流水号
/// 发送计数器
/// 占用两个字节,为发送信息的序列号,用于接收方检测是否有信息的丢失,上级平台和下级平台接自己发送数据包的个数计数,互不影响。
/// 程序开始运行时等于零,发送第一帧数据时开始计数,到最大数后自动归零
/// </summary>
public ushort MsgNum { get; set; }
public ushort MsgNum { get { return ManualMsgNum ?? 0; } set { ManualMsgNum = value; } }
/// <summary>
/// 手动消息流水号(only test)
/// 发送计数器
@@ -63,7 +63,7 @@ namespace JT808.Protocol
// 2.消息体属性
jT808Header.MessageBodyProperty = new JT808HeaderMessageBodyProperty(reader.ReadUInt16());
if (jT808Header.MessageBodyProperty.VersionFlag)
{
{
// 2019 版本
// 3.协议版本号
jT808Header.ProtocolVersion = reader.ReadByte();


+ 1
- 2
src/JT808.Protocol/JT808Package.cs 查看文件

@@ -193,8 +193,7 @@ namespace JT808.Protocol
else
{
// 2.4.消息流水号
if (value.Header.MsgNum <= 0)
value.Header.MsgNum = config.MsgSNDistributed.Increment(value.Header.TerminalPhoneNo);
value.Header.MsgNum = config.MsgSNDistributed.Increment(value.Header.TerminalPhoneNo);
writer.WriteUInt16(value.Header.MsgNum);
}
// 2.5.判断是否分包


Loading…
取消
儲存