Browse Source

1.修改消息命令

2.增加平台登入登出命令及测试
tags/1.0.0
SmallChi 7 years ago
parent
commit
20ebbf5ab3
8 changed files with 282 additions and 8 deletions
  1. +71
    -1
      src/GBNewEnergy.Protocol.Test/NEPackageTest.cs
  2. +14
    -6
      src/GBNewEnergy.Protocol/Enums/NEMsgId.cs
  3. +5
    -0
      src/GBNewEnergy.Protocol/Extensions/NEExtensions.cs
  4. +14
    -1
      src/GBNewEnergy.Protocol/NEBodies.cs
  5. +27
    -0
      src/GBNewEnergy.Protocol/NEProperties/NEPlatformLoginProperty.cs
  6. +16
    -0
      src/GBNewEnergy.Protocol/NEProperties/NEPlatformLogoutProperty.cs
  7. +88
    -0
      src/GBNewEnergy.Protocol/UpStream/NEPlatformLoginUpStream.cs
  8. +47
    -0
      src/GBNewEnergy.Protocol/UpStream/NEPlatformLogoutUpStream.cs

+ 71
- 1
src/GBNewEnergy.Protocol.Test/NEPackageTest.cs View File

@@ -16,6 +16,7 @@ namespace GBNewEnergy.Protocol.Test
{

};

#region 车辆登入
[Fact]
public void NELoginUpStreamConstructor4_1()
@@ -70,7 +71,7 @@ namespace GBNewEnergy.Protocol.Test
}
#endregion

#region 车辆登出(依赖车辆登录的流水号所有必须先进行登录产生流水号)
#region 车辆登出(依赖车辆登入的流水号所有必须先进行登入产生流水号)

[Fact]
public void NELogoutUpStream1_1()
@@ -155,5 +156,74 @@ namespace GBNewEnergy.Protocol.Test

#endregion

#region 平台登入

[Fact]
public void NEPlatformLogin1_1()
{
NEPlatformLoginProperty nEPlatformLoginProperty = new NEPlatformLoginProperty
{
EncryptMethod = NEEncryptMethod.None,
Password = "123456",
UserName = "smallchi",
};
NEPlatformLoginUpStream nEPlatformLoginUpStream = new NEPlatformLoginUpStream(nEPlatformLoginProperty, NEGlobalConfigs);

INEProperties nEPackageProperty = new NEPackageProperty
{
Bodies = nEPlatformLoginUpStream,
MsgId = Enums.NEMsgId.platformlogin,
AskId = Enums.NEAskId.cmd,
VIN = "LGHC4V1D3HE202652"
};
NEPackage nEPackage = new NEPackage(nEPackageProperty, NEGlobalConfigs);
string headerHex = nEPackage.Header.ToHexString();
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString();
string packageHex = nEPackage.Buffer.ToHexString();
}

#endregion

#region 平台登出(依赖平台登出的流水号所有必须先进行登入产生流水号)

[Fact]
public void NEPlatformLogin2_1()
{
NEPlatformLoginProperty nEPlatformLoginProperty = new NEPlatformLoginProperty
{
EncryptMethod = NEEncryptMethod.None,
Password = "123456",
UserName = "smallchi",
};
NEPlatformLoginUpStream nEPlatformLoginUpStream = new NEPlatformLoginUpStream(nEPlatformLoginProperty, NEGlobalConfigs);
INEProperties nEPackageProperty = new NEPackageProperty
{
Bodies = nEPlatformLoginUpStream,
MsgId = Enums.NEMsgId.platformlogin,
AskId = Enums.NEAskId.cmd,
VIN = "LGHC4V1D3HE202652"
};
NEPackage nEPackage = new NEPackage(nEPackageProperty, NEGlobalConfigs);

NEPlatformLogoutProperty nEPlatformLogoutProperty = new NEPlatformLogoutProperty
{
UserName = "smallchi",
};
NEPlatformLoginUpStream nEPlatformLogoutUpStream = new NEPlatformLoginUpStream(nEPlatformLoginProperty, NEGlobalConfigs);
INEProperties logoutNEPackageProperty = new NEPackageProperty
{
Bodies = nEPlatformLogoutUpStream,
MsgId = Enums.NEMsgId.platformlogout,
AskId = Enums.NEAskId.cmd,
VIN = "LGHC4V1D3HE202652"
};
NEPackage loginNEPackage = new NEPackage(logoutNEPackageProperty, NEGlobalConfigs);
string headerHex = loginNEPackage.Header.ToHexString();
string bodiesHex = loginNEPackage.Bodies.Buffer.ToHexString();
string packageHex = loginNEPackage.Buffer.ToHexString();
}


#endregion
}
}

+ 14
- 6
src/GBNewEnergy.Protocol/Enums/NEMsgId.cs View File

@@ -18,17 +18,25 @@ namespace GBNewEnergy.Protocol.Enums
/// </summary>
uploadim = 0x02,
/// <summary>
/// 心跳
/// </summary>
heartbeat = 0x03,
/// <summary>
/// 补传信息上传
/// </summary>
uploadsup = 0x04,
uploadsup = 0x03,
/// <summary>
/// 车辆登出
/// </summary>
loginout = 0x05,
loginout = 0x04,
/// <summary>
/// 平台登入
/// </summary>
platformlogin = 0x05,
/// <summary>
/// 平台登出
/// </summary>
platformlogout = 0x06,
/// <summary>
/// 心跳
/// </summary>
heartbeat = 0x07,
/// <summary>
/// 终端校时
/// </summary>


+ 5
- 0
src/GBNewEnergy.Protocol/Extensions/NEExtensions.cs View File

@@ -82,6 +82,11 @@ namespace GBNewEnergy.Protocol.Extensions
Array.Copy(bytes, 0, write, offset, len);
}

public static void WriteLittle(this byte[] write, byte bit, int offset)
{
write[offset] = bit;
}

public static void WriteLittle(this byte[] write, DateTime date, int offset,int len)
{
write[offset++] = (byte)(date.Year - DateLimitYear);


+ 14
- 1
src/GBNewEnergy.Protocol/NEBodies.cs View File

@@ -8,14 +8,21 @@ namespace GBNewEnergy.Protocol
public abstract class NEBodies : NEBufferedEntityBase
{
/// <summary>
/// VIN - 登流水号,过期时间(每天置1)
/// VIN - 登流水号,过期时间(每天置1)
/// 车载终端登入一次,登入流水号自动加1,从1开始循环累加,最大值为65531,循环周期为天
/// </summary>
protected static readonly ConcurrentDictionary<string, LoginInfo> LoginNumDict;

/// <summary>
/// 平台登入 登录流水号,过期时间(每天置1)
/// 下级平台登入一次,登入流水号自动加1,从1开始循环累加,最大值为65531,循环周期为天
/// </summary>
protected static readonly ConcurrentDictionary<string, PlatformLoginInfo> PlatformLoginNumDict;

static NEBodies()
{
LoginNumDict = new ConcurrentDictionary<string, LoginInfo>();
PlatformLoginNumDict = new ConcurrentDictionary<string, PlatformLoginInfo>();
}

/// <summary>
@@ -39,5 +46,11 @@ namespace GBNewEnergy.Protocol
public ushort LoginNum { get; set; }
public DateTime ExpirationTime { get; set; }
}

protected class PlatformLoginInfo
{
public ushort LoginNum { get; set; }
public DateTime ExpirationTime { get; set; }
}
}
}

+ 27
- 0
src/GBNewEnergy.Protocol/NEProperties/NEPlatformLoginProperty.cs View File

@@ -0,0 +1,27 @@
using GBNewEnergy.Protocol.Enums;
using System;
using System.Collections.Generic;
using System.Text;

namespace GBNewEnergy.Protocol.NEProperties
{
public class NEPlatformLoginProperty : INEProperties
{
[Obsolete("平台登入无用字段")]
public string VIN { get ; set; }
/// <summary>
/// 平台用户名
/// </summary>
public string UserName { get; set; }

/// <summary>
/// 加密规则
/// </summary>
public NEEncryptMethod EncryptMethod { get; set; }

/// <summary>
/// 平台密码
/// </summary>
public string Password { get; set; }
}
}

+ 16
- 0
src/GBNewEnergy.Protocol/NEProperties/NEPlatformLogoutProperty.cs View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace GBNewEnergy.Protocol.NEProperties
{
public class NEPlatformLogoutProperty : INEProperties
{
[Obsolete("平台登入无用字段")]
public string VIN { get; set; }
/// <summary>
/// 平台用户名
/// </summary>
public string UserName { get; set; }
}
}

+ 88
- 0
src/GBNewEnergy.Protocol/UpStream/NEPlatformLoginUpStream.cs View File

@@ -0,0 +1,88 @@
using GBNewEnergy.Protocol.Enums;
using GBNewEnergy.Protocol.Extensions;
using GBNewEnergy.Protocol.NEProperties;
using System;
using System.Collections.Generic;
using System.Text;

namespace GBNewEnergy.Protocol.UpStream
{
/// <summary>
/// 平台登入
/// </summary>
public class NEPlatformLoginUpStream : NEBodies
{
public NEPlatformLoginUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs)
{
}

public NEPlatformLoginUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs)
{
}

/// <summary>
/// 平台用户名
/// </summary>
public string UserName { get; set; }

/// <summary>
/// 加密规则
/// </summary>
public NEEncryptMethod EncryptMethod { get; set; }

/// <summary>
/// 平台密码
/// </summary>
public string Password { get; set; }

protected override void InitializeProperties(INEProperties nEProperties)
{
NEPlatformLoginProperty nEPlatformLoginProperty = (NEPlatformLoginProperty)nEProperties;
if (PlatformLoginNumDict.ContainsKey(nEPlatformLoginProperty.UserName))
{
PlatformLoginInfo temp;
if (PlatformLoginNumDict.TryGetValue(nEPlatformLoginProperty.UserName, out temp))
{
// 不等于当天
if (temp.ExpirationTime != DateTime.Now.Date)
{
LoginNum = 1;
PlatformLoginNumDict.TryUpdate(nEPlatformLoginProperty.UserName, new PlatformLoginInfo { LoginNum = LoginNum, ExpirationTime = DateTime.Now.Date }, temp);
}
else
{// 自增1 更新字典
LoginNum = temp.LoginNum++;
PlatformLoginNumDict.TryUpdate(nEPlatformLoginProperty.UserName, new PlatformLoginInfo { LoginNum = LoginNum, ExpirationTime = DateTime.Now.Date }, temp);
}
}
}
else
{
LoginNum = 1;
PlatformLoginNumDict.TryAdd(nEPlatformLoginProperty.UserName, new PlatformLoginInfo { LoginNum = LoginNum, ExpirationTime = DateTime.Now.Date });
}
UserName = nEPlatformLoginProperty.UserName;
EncryptMethod = nEPlatformLoginProperty.EncryptMethod;
Password = nEPlatformLoginProperty.Password;
}

protected override void InitializePropertiesFromBuffer()
{
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6);
LoginNum = Buffer.ReadUShortH2LLittle(6, 2);
UserName = Buffer.ReadStringLittle(6, 12);
Password = Buffer.ReadStringLittle(12, 20);
EncryptMethod= (NEEncryptMethod)Buffer[21];
}

protected override void ToBuffer()
{
Buffer = new byte[6+2+12+20+1];
Buffer.WriteLittle(CurrentDateTime, 0, 6);
Buffer.WriteLittle(LoginNum, 6, 2);
Buffer.WriteLittle(UserName, 12);
Buffer.WriteLittle(Password, 20);
Buffer.WriteLittle((byte)EncryptMethod, 21);
}
}
}

+ 47
- 0
src/GBNewEnergy.Protocol/UpStream/NEPlatformLogoutUpStream.cs View File

@@ -0,0 +1,47 @@
using GBNewEnergy.Protocol.Exceptions;
using GBNewEnergy.Protocol.Extensions;
using GBNewEnergy.Protocol.NEProperties;

namespace GBNewEnergy.Protocol.UpStream
{
/// <summary>
/// 平台登出
/// </summary>
public class NEPlatformLogoutUpStream : NEBodies
{
public NEPlatformLogoutUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs)
{
}

public NEPlatformLogoutUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs)
{
}

protected override void InitializeProperties(INEProperties nEProperties)
{
NEPlatformLogoutProperty nEPlatformLogoutProperty = (NEPlatformLogoutProperty)nEProperties;
PlatformLoginInfo temp;
if (PlatformLoginNumDict.TryGetValue(nEPlatformLogoutProperty.UserName, out temp))
{
LoginNum = temp.LoginNum;
}
else
{
throw new NEException(Enums.NEErrorCode.LoginSerialNoError, "Must Dependency NEPlatformLoginUpStream Class.");
}
}

protected override void InitializePropertiesFromBuffer()
{
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6);
LoginNum = Buffer.ReadUShortH2LLittle(6, 2);
}

protected override void ToBuffer()
{
Buffer = new byte[8];
Buffer.WriteLittle(CurrentDateTime, 0, 6);
Buffer.WriteLittle(LoginNum, 6, 2);
}
}
}

||||||
x
 
000:0
Loading…
Cancel
Save