From 4dafd58710cee7a101ad59d41ce9fc6b716f6fea Mon Sep 17 00:00:00 2001
From: SmallChi <564952747@qq.com>
Date: Fri, 8 Jun 2018 11:53:40 +0800
Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E8=BD=A6=E8=BE=86=E7=99=BB?=
=?UTF-8?q?=E5=87=BA=E5=8F=8A=E6=B5=8B=E8=AF=95=202.=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E8=BD=A6=E8=BE=86=E7=99=BB=E5=87=BA=E9=94=99=E8=AF=AF=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../NEPackageTest.cs | 64 ++++++++++++++++---
src/GBNewEnergy.Protocol/Enums/ErrorCode.cs | 12 +++-
src/GBNewEnergy.Protocol/NEBodiesFactory.cs | 2 +
.../UpStream/NELoginUpStream.cs | 3 +
.../UpStream/NELogoutUpStream.cs | 22 +++++--
src/GBNewEnergy.sln | 2 +-
6 files changed, 89 insertions(+), 16 deletions(-)
diff --git a/src/GBNewEnergy.Protocol.Test/NEPackageTest.cs b/src/GBNewEnergy.Protocol.Test/NEPackageTest.cs
index 7faa257..98e163c 100644
--- a/src/GBNewEnergy.Protocol.Test/NEPackageTest.cs
+++ b/src/GBNewEnergy.Protocol.Test/NEPackageTest.cs
@@ -5,27 +5,21 @@ using Xunit;
using GBNewEnergy.Protocol.Extensions;
using GBNewEnergy.Protocol.UpStream;
using GBNewEnergy.Protocol.Enums;
+using GBNewEnergy.Protocol.Exceptions;
namespace GBNewEnergy.Protocol.Test
{
public class NEPackageTest
{
- [Fact]
- public void NEPackageConstructor()
- {
- byte[] header = "23 23 02 FE 54 45 53 54 32 30 31 38 30 34 31 36 30 30 30 30 31 01 02 25".ToHexBytes();
- byte[] body = "12 05 0F 0F 29 15 01 02 01 01 00 00 00 00 33 54 19 B1 23 06 58 01 00 06 9F 00 00 02 01 01 03 47 00 00 4E 20 47 10 D6 27 24 05 01 06 CA 3C 03 01 57 8E C3 06 01 38 0D 5C 01 01 0D 48 01 01 43 01 0B 42 07 00 00 00 00 00 00 00 00 00 08 01 01 19 B1 23 06 00 C0 00 01 C0 0D 48 0D 48 0D 48 0D 48 0D 52 0D 48 0D 48 0D 52 0D 52 0D 48 0D 48 0D 52 0D 48 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 48 0D 52 0D 48 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 48 0D 48 0D 48 0D 48 0D 52 0D 48 0D 52 0D 48 0D 52 0D 48 0D 48 0D 48 0D 5C 0D 52 0D 52 0D 52 0D 5C 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 48 0D 48 0D 52 0D 48 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 48 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 52 0D 48 0D 48 0D 48 0D 48 0D 52 0D 52 0D 48 0D 48 0D 48 0D 52 0D 48 0D 48 0D 48 0D 52 0D 48 0D 52 0D 52 09 01 01 00 48 43 43 43 43 43 43 43 43 43 43 42 43 42 42 42 42 42 43 42 42 42 42 42 42 42 43 42 42 42 43 42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 42 42 43 42 42 42 42 42 42 42 42 43 42 42 43 43 43 42 43 43 43 43 43 43 43 43 43 48".ToHexBytes();
- NEPackage nEPackage = new NEPackage(header, body);
- }
-
+ #region 车辆登入
[Fact]
public void NELoginUpStreamConstructor1_1()
{
// "23 23 01 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 1F"
// "12 06 07 11 04 1B 00 01 36 34 37 34 33 30 36 36 34 30 35 00 00 00 00 00 00 00 00 00 01 01 31"
// "23 23 01 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 1F 12 06 07 11 04 1B 00 01 36 34 37 34 33 30 36 36 34 30 35 00 00 00 00 00 00 00 00 00 01 01 31 D7"
- NELoginUpStream nELoginUpStream = new NELoginUpStream("LGHC4V1D3HE202652", "64743066405", 1,1,new string[] { "1"});
- NEPackage nEPackage = new NEPackage("LGHC4V1D3HE202652", Enums.MsgId.login,Enums.AskId.cmd, nELoginUpStream, EncryptMethod.None);
+ NELoginUpStream nELoginUpStream = new NELoginUpStream("LGHC4V1D3HE202652", "64743066405", 1, 1, new string[] { "1" });
+ NEPackage nEPackage = new NEPackage("LGHC4V1D3HE202652", Enums.MsgId.login, Enums.AskId.cmd, nELoginUpStream, EncryptMethod.None);
string headerHex = nEPackage.Header.ToHexString();
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString();
string packageHex = nEPackage.Buffer.ToHexString();
@@ -87,5 +81,55 @@ namespace GBNewEnergy.Protocol.Test
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString();
string packageHex = nEPackage.Buffer.ToHexString();
}
+ #endregion
+
+ #region 车辆登出(依赖车辆登录的流水号所有必须先进行登录产生流水号)
+
+ [Fact]
+ public void NELogoutUpStream1_1()
+ {
+ try
+ {
+ NELoginUpStream nELoginUpStream = new NELoginUpStream("LGHC4V1D3HE202652", "64743066405", 1, 1, new string[] { "1" });
+ NELogoutUpStream eLogoutUpStream = new NELogoutUpStream("LGHC4V1D3HE202652");
+ NEPackage nEPackage = new NEPackage("LGHC4V1D3HE202652", Enums.MsgId.loginout, Enums.AskId.cmd, eLogoutUpStream, EncryptMethod.None);
+ }
+ catch (NEException ex)
+ {
+ Assert.Equal(ErrorCode.LoginSerialNoError, ex.ErrorCode);
+ }
+ }
+
+ [Fact]
+ public void NELogoutUpStream2_1()
+ {
+ // 先进行车辆登入
+ NELoginUpStream nELoginUpStream = new NELoginUpStream("LGHC4V1D3HE202652", "64743066405", 1, 1, new string[] { "1" });
+ // "23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 08"
+ // "12 06 08 0B 2B 0A 00 01"
+ // "23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 08 12 06 08 0B 2B 0A 00 01 ED"
+ // 车辆登出
+ NELogoutUpStream eLogoutUpStream = new NELogoutUpStream("LGHC4V1D3HE202652");
+ NEPackage nEPackage = new NEPackage("LGHC4V1D3HE202652", Enums.MsgId.loginout, Enums.AskId.cmd, eLogoutUpStream, EncryptMethod.None);
+ string headerHex = nEPackage.Header.ToHexString();
+ string bodiesHex = nEPackage.Bodies.Buffer.ToHexString();
+ string packageHex = nEPackage.Buffer.ToHexString();
+ }
+
+ [Fact]
+ public void NELogoutUpStream2_2()
+ {
+ byte[] header = "23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 08".ToHexBytes();
+ byte[] body = "12 06 08 0B 2B 0A 00 01 ED".ToHexBytes();
+ NEPackage nEPackage = new NEPackage(header, body);
+ string headerHex = nEPackage.Header.ToHexString();
+ string bodiesHex = nEPackage.Bodies.Buffer.ToHexString();
+ string packageHex = nEPackage.Buffer.ToHexString();
+ Assert.Equal("23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 08", headerHex);
+ Assert.Equal("12 06 08 0B 2B 0A 00 01 ED", bodiesHex);
+ }
+
+ #endregion
+
}
}
diff --git a/src/GBNewEnergy.Protocol/Enums/ErrorCode.cs b/src/GBNewEnergy.Protocol/Enums/ErrorCode.cs
index bbeca9a..0e45987 100644
--- a/src/GBNewEnergy.Protocol/Enums/ErrorCode.cs
+++ b/src/GBNewEnergy.Protocol/Enums/ErrorCode.cs
@@ -6,7 +6,17 @@ namespace GBNewEnergy.Protocol.Enums
{
public enum ErrorCode
{
+ ///
+ /// 开始标识错误
+ ///
BeginFlagError = 1001,
- BCCCodeError = 1001
+ ///
+ /// BCC校验错误
+ ///
+ BCCCodeError = 1002,
+ ///
+ /// 登入流水号错误
+ ///
+ LoginSerialNoError=1003
}
}
diff --git a/src/GBNewEnergy.Protocol/NEBodiesFactory.cs b/src/GBNewEnergy.Protocol/NEBodiesFactory.cs
index 96434b0..1a6c3b7 100644
--- a/src/GBNewEnergy.Protocol/NEBodiesFactory.cs
+++ b/src/GBNewEnergy.Protocol/NEBodiesFactory.cs
@@ -20,6 +20,8 @@ namespace GBNewEnergy.Protocol
{
case MsgId.login:
return new NELoginUpStream(buf);
+ case MsgId.loginout:
+ return new NELogoutUpStream(buf);
default:
return null;
}
diff --git a/src/GBNewEnergy.Protocol/UpStream/NELoginUpStream.cs b/src/GBNewEnergy.Protocol/UpStream/NELoginUpStream.cs
index 987fb82..e8f89c1 100644
--- a/src/GBNewEnergy.Protocol/UpStream/NELoginUpStream.cs
+++ b/src/GBNewEnergy.Protocol/UpStream/NELoginUpStream.cs
@@ -5,6 +5,9 @@ using System.Text;
namespace GBNewEnergy.Protocol.UpStream
{
+ ///
+ /// 车辆登入
+ ///
public class NELoginUpStream : NEBodies
{
public NELoginUpStream(byte[] buffer) : base(buffer)
diff --git a/src/GBNewEnergy.Protocol/UpStream/NELogoutUpStream.cs b/src/GBNewEnergy.Protocol/UpStream/NELogoutUpStream.cs
index d9ffe5f..b4b244b 100644
--- a/src/GBNewEnergy.Protocol/UpStream/NELogoutUpStream.cs
+++ b/src/GBNewEnergy.Protocol/UpStream/NELogoutUpStream.cs
@@ -1,27 +1,41 @@
-using System;
+using GBNewEnergy.Protocol.Exceptions;
+using GBNewEnergy.Protocol.Extensions;
+using System;
using System.Collections.Generic;
using System.Text;
namespace GBNewEnergy.Protocol.UpStream
{
+ ///
+ /// 车辆登入
+ ///
public class NELogoutUpStream : NEBodies
{
- protected NELogoutUpStream(byte[] buffer) : base(buffer)
+ public NELogoutUpStream(byte[] buffer) : base(buffer)
{
+ CurrentDateTime = buffer.ReadDateTimeLittle(0, 6);
+ LoginNum = buffer.ReadUShortH2LLittle(6, 2);
}
- protected NELogoutUpStream(string vin) : base(vin)
+ public NELogoutUpStream(string vin) : base(vin)
{
(ushort LoginNum, DateTime ExpirationTime) temp;
if (LoginNumDict.TryGetValue(vin, out temp))
{
LoginNum = temp.LoginNum;
}
+ else
+ {
+ throw new NEException(Enums.ErrorCode.LoginSerialNoError, "Must Dependency NELoginUpStream Class.");
+ }
+ ToBuffer();
}
public override void ToBuffer()
{
- throw new NotImplementedException();
+ Buffer = new byte[8];
+ Buffer.WriteLittle(CurrentDateTime, 0, 6);
+ Buffer.WriteLittle(LoginNum, 6, 2);
}
}
}
diff --git a/src/GBNewEnergy.sln b/src/GBNewEnergy.sln
index 8ded8a7..7de74ac 100644
--- a/src/GBNewEnergy.sln
+++ b/src/GBNewEnergy.sln
@@ -5,7 +5,7 @@ VisualStudioVersion = 15.0.27703.2018
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GBNewEnergy.Protocol", "GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj", "{1934F3A6-1396-46C2-BFD6-1E2DC1A26E3A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GBNewEnergy.Protocol.Test", "GBNewEnergy.Protocol.Test\GBNewEnergy.Protocol.Test.csproj", "{AAA669F5-E689-40CA-97EF-B5BA672B11DD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GBNewEnergy.Protocol.Test", "GBNewEnergy.Protocol.Test\GBNewEnergy.Protocol.Test.csproj", "{AAA669F5-E689-40CA-97EF-B5BA672B11DD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution