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