@@ -1,125 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.DownStream; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.Test.DownStream | |||||
{ | |||||
public class NEControlDownStreamTest : NEPackageBase | |||||
{ | |||||
#region NEControlCmd.unused | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_1() | |||||
{ | |||||
NEControlProperty nEControlProperty = new NEControlProperty | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652", | |||||
CmdID=NEControlCmd.unused, | |||||
UpgradeParameter=new NEControlUpgradeParameter { | |||||
DialPassword = "123", | |||||
DialPointName = "xyz", | |||||
DialUserName = "11" | |||||
} | |||||
}; | |||||
NEControlDownStream nEControlDownStream = new NEControlDownStream(nEControlProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nEControlDownStream, | |||||
MsgId = Enums.NEMsgId.control, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_2() | |||||
{ | |||||
byte[] packageBytes = "23 23 82 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 07 12 06 0E 0A 0E 1B 00 57".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
#region NEControlCmd.remoteupdate | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_3() | |||||
{ | |||||
NEControlProperty nEControlProperty = new NEControlProperty | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652", | |||||
CmdID = NEControlCmd.remoteupdate, | |||||
UpgradeParameter=new NEControlUpgradeParameter { | |||||
DialPassword = "123", | |||||
DialPointName = "xyz", | |||||
DialUserName = "11" | |||||
} | |||||
}; | |||||
NEControlDownStream nEControlDownStream = new NEControlDownStream(nEControlProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nEControlDownStream, | |||||
MsgId = Enums.NEMsgId.control, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_4() | |||||
{ | |||||
byte[] packageBytes = "23 23 82 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 18 12 06 0E 0A 22 0B 01 3B 78 79 7A 3B 31 31 3B 31 32 33 3B 3B 3B 3B 3B 3B 05".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
#region NEControlCmd.warning | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_5() | |||||
{ | |||||
NEControlProperty nEControlProperty = new NEControlProperty | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652", | |||||
CmdID = NEControlCmd.warning, | |||||
AlarmParameter= new NEControlAlarmParameter { nEAlarmLevel= NEAlarmLevel.一级报警 } | |||||
}; | |||||
NEControlDownStream nEControlDownStream = new NEControlDownStream(nEControlProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nEControlDownStream, | |||||
MsgId = Enums.NEMsgId.control, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEControlDownStreamConstructor4_6() | |||||
{ | |||||
byte[] packageBytes = "23 23 82 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 08 12 06 0E 0B 2C 0B 06 01 6C".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -1,28 +0,0 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFramework>netcoreapp2.1</TargetFramework> | |||||
<IsPackable>false</IsPackable> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | |||||
<LangVersion>7.2</LangVersion> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | |||||
<LangVersion>7.2</LangVersion> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" /> | |||||
<PackageReference Include="xunit" Version="2.3.1" /> | |||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" /> | |||||
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -1,14 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Test | |||||
{ | |||||
public class NEPackageBase | |||||
{ | |||||
public readonly NEGlobalConfigs NEGlobalConfigs = new NEGlobalConfigs() | |||||
{ | |||||
}; | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.Exceptions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.DownStream; | |||||
namespace GBNewEnergy.Protocol.Test | |||||
{ | |||||
public class NEPackageTest: NEPackageBase | |||||
{ | |||||
} | |||||
} |
@@ -1,152 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
namespace GBNewEnergy.Protocol.Test.UpStream | |||||
{ | |||||
public class CommonUpStreamTest: NEPackageBase | |||||
{ | |||||
#region 控制应答 | |||||
[Fact] | |||||
public void NEControlTest1_1() | |||||
{ | |||||
// "23 23 82 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 21 08 96" | |||||
CommonUpStream nEControlDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nEControlDownStream, | |||||
MsgId = Enums.NEMsgId.control, | |||||
AskId = Enums.NEAskId.success, | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NEPackage nEPackage = new NEPackage(nEPackageProperty, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
[Fact] | |||||
public void NEControlTest1_2() | |||||
{ | |||||
// "23 23 82 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 21 08 96" | |||||
byte[] packageBytes = "23 23 82 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 21 08 96".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
#region 设置应答 | |||||
[Fact] | |||||
public void NESettingsTest1_1() | |||||
{ | |||||
// "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A" | |||||
CommonUpStream nESettingsDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nESettingsDownStream, | |||||
MsgId = Enums.NEMsgId.settings, | |||||
AskId = Enums.NEAskId.success, | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NEPackage nEPackage = new NEPackage(nEPackageProperty, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
[Fact] | |||||
public void NESettingsTest1_2() | |||||
{ | |||||
byte[] packageBytes = "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
#region 心跳 | |||||
[Fact] | |||||
public void NEHeartbeatTest1_1() | |||||
{ | |||||
// "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A" | |||||
CommonUpStream nESettingsDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nESettingsDownStream, | |||||
MsgId = Enums.NEMsgId.heartbeat, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEHeartbeatTest1_2() | |||||
{ | |||||
// "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A" | |||||
CommonUpStream nESettingsDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nESettingsDownStream, | |||||
MsgId = Enums.NEMsgId.heartbeat, | |||||
AskId = Enums.NEAskId.success, | |||||
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 NECheckTimeTest1_1() | |||||
{ | |||||
// "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A" | |||||
CommonUpStream nESettingsDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nESettingsDownStream, | |||||
MsgId = Enums.NEMsgId.checktime, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NECheckTimeTest1_2() | |||||
{ | |||||
// "23 23 81 01 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 06 12 06 0C 0B 23 15 8A" | |||||
CommonUpStream nESettingsDownStream = new CommonUpStream(new NEEmptyProperty(), NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nESettingsDownStream, | |||||
MsgId = Enums.NEMsgId.checktime, | |||||
AskId = Enums.NEAskId.success, | |||||
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 | |||||
} | |||||
} |
@@ -1,67 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
namespace GBNewEnergy.Protocol.Test.UpStream | |||||
{ | |||||
public class NELoginUpStreamTest:NEPackageTest | |||||
{ | |||||
#region 车辆登入 | |||||
[Fact] | |||||
public void NELoginUpStreamConstructor4_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 08 11 09 14 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 08 11 09 14 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 DA" | |||||
INEProperties nELoginProperty = new NELoginProperty | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652", | |||||
BatteryCount = 1, | |||||
BatteryLength = 1, | |||||
BatteryNos = new List<string>() { "1" }, | |||||
SIM = "64743066405" | |||||
}; | |||||
NELoginUpStream nELoginUpStream = new NELoginUpStream(nELoginProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nELoginUpStream, | |||||
MsgId = Enums.NEMsgId.login, | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NELoginUpStreamConstructor4_2() | |||||
{ | |||||
// "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" | |||||
byte[] header = "23 23 01 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 1F".ToHexBytes(); | |||||
byte[] body = "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".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(header, body, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
[Fact] | |||||
public void NELoginUpStreamConstructor4_3() | |||||
{ | |||||
// "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" | |||||
byte[] packageBytes = "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".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -1,100 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Exceptions; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.Test.UpStream | |||||
{ | |||||
public class NELogoutUpStreamTest:NEPackageBase | |||||
{ | |||||
#region 车辆登出(依赖车辆登入的流水号所有必须先进行登入产生流水号) | |||||
[Fact] | |||||
public void NELogoutUpStream1_1() | |||||
{ | |||||
try | |||||
{ | |||||
INEProperties nELogoutProperty = new NELogoutProperty() | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NELogoutUpStream nELogoutUpStream1 = new NELogoutUpStream(nELogoutProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty1 = new NEPackageProperty | |||||
{ | |||||
Bodies = nELogoutUpStream1, | |||||
MsgId = Enums.NEMsgId.login, | |||||
AskId = Enums.NEAskId.cmd, | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NEPackage nEPackage = new NEPackage(nEPackageProperty1, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
catch (NEException ex) | |||||
{ | |||||
Assert.Equal(NEErrorCode.LoginSerialNoError, ex.ErrorCode); | |||||
} | |||||
} | |||||
[Fact] | |||||
public void NELogoutUpStream2_1() | |||||
{ | |||||
INEProperties nELoginProperty = new NELoginProperty | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652", | |||||
BatteryCount = 1, | |||||
BatteryLength = 1, | |||||
BatteryNos = new List<string>() { "1" }, | |||||
SIM = "64743066405" | |||||
}; | |||||
NELoginUpStream nELoginUpStream = new NELoginUpStream(nELoginProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty = new NEPackageProperty | |||||
{ | |||||
Bodies = nELoginUpStream, | |||||
MsgId = Enums.NEMsgId.login, | |||||
AskId = Enums.NEAskId.cmd, | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NEPackage nEPackageLogin = new NEPackage(nEPackageProperty, NEGlobalConfigs); | |||||
INEProperties nELogoutProperty = new NELogoutProperty() | |||||
{ | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NELogoutUpStream nELogoutUpStream1 = new NELogoutUpStream(nELogoutProperty, NEGlobalConfigs); | |||||
INEProperties nEPackageProperty1 = new NEPackageProperty | |||||
{ | |||||
Bodies = nELogoutUpStream1, | |||||
MsgId = Enums.NEMsgId.loginout, | |||||
AskId = Enums.NEAskId.cmd, | |||||
VIN = "LGHC4V1D3HE202652" | |||||
}; | |||||
NEPackage nEPackage = new NEPackage(nEPackageProperty1, NEGlobalConfigs); | |||||
// "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 12 06 3A 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 12 06 3A 00 01 E9" | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
[Fact] | |||||
public void NELogoutUpStream2_2() | |||||
{ | |||||
byte[] packageBytes = "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 12 06 3A 00 01 E9".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
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 12 06 3A 00 01 E9", bodiesHex); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -1,52 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.Test.UpStream | |||||
{ | |||||
public class NEPlatformLoginUpStreamTest:NEPackageBase | |||||
{ | |||||
#region 平台登入 | |||||
[Fact] | |||||
public void NEPlatformLogin1_1() | |||||
{ | |||||
// "23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 29 12 06 0C 09 2F 12 00 01 00 00 00 00 73 6D 61 6C 6C 63 68 69 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 CD" | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEPlatformLogin1_2() | |||||
{ | |||||
byte[] packageBytes = "23 23 05 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 29 12 06 0C 09 2F 12 00 01 00 00 00 00 73 6D 61 6C 6C 63 68 69 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 CD".ToHexBytes(); | |||||
NEPackage nEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = nEPackage.Header.ToHexString(); | |||||
string bodiesHex = nEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = nEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -1,67 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using Xunit; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.Test.UpStream | |||||
{ | |||||
public class NEPlatformLogoutUpStreamTest : NEPackageBase | |||||
{ | |||||
#region 平台登出(依赖平台登出的流水号所有必须先进行登入产生流水号) | |||||
[Fact] | |||||
public void NEPlatformLogin2_1() | |||||
{ | |||||
//"23 23 06 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 29 12 06 0C 09 3A 17 00 01 00 00 00 00 73 6D 61 6C 6C 63 68 69 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 DE" | |||||
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(); | |||||
} | |||||
[Fact] | |||||
public void NEPlatformLogin2_2() | |||||
{ | |||||
byte[] packageBytes = "23 23 06 FE 4C 47 48 43 34 56 31 44 33 48 45 32 30 32 36 35 32 01 00 29 12 06 0C 09 3A 17 00 01 00 00 00 00 73 6D 61 6C 6C 63 68 69 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 DE".ToHexBytes(); | |||||
NEPackage loginNEPackage = new NEPackage(packageBytes, NEGlobalConfigs); | |||||
string headerHex = loginNEPackage.Header.ToHexString(); | |||||
string bodiesHex = loginNEPackage.Bodies.Buffer.ToHexString(); | |||||
string packageHex = loginNEPackage.Buffer.ToHexString(); | |||||
} | |||||
#endregion | |||||
} | |||||
} |
@@ -1,92 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.DownStream | |||||
{ | |||||
/// <summary> | |||||
/// 车载终端控制命令 | |||||
/// </summary> | |||||
public class NEControlDownStream : NEBodies | |||||
{ | |||||
public NEControlDownStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
public NEControlDownStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 命令ID 只能发送一个 | |||||
/// </summary> | |||||
public NEControlCmd CmdID { get; set; } | |||||
/// <summary> | |||||
/// 命令参数 没有内容则内容为空 | |||||
/// </summary> | |||||
public string CmdParameter { get; set; } | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
NEControlProperty nEControlProperty = (NEControlProperty)nEProperties; | |||||
CmdID = nEControlProperty.CmdID; | |||||
if (CmdID == NEControlCmd.remoteupdate) | |||||
{ | |||||
CmdParameter = nEControlProperty.UpgradeParameter.ToString(); | |||||
} | |||||
else if(CmdID == NEControlCmd.warning) | |||||
{ | |||||
CmdParameter = nEControlProperty.AlarmParameter.nEAlarmLevel.ToString(); | |||||
} | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6); | |||||
CmdID = (NEControlCmd)Buffer[6]; | |||||
switch (CmdID) | |||||
{ | |||||
case NEControlCmd.remoteupdate: | |||||
CmdParameter = Buffer.ReadStringLittle(7, Buffer.Length - 8);//最后一位为校验码,不在参数列 | |||||
break; | |||||
case NEControlCmd.warning: | |||||
CmdParameter = ((NEAlarmLevel)Buffer[7]).ToString(); | |||||
break; | |||||
case NEControlCmd.unused: | |||||
case NEControlCmd.shutdown: | |||||
case NEControlCmd.reset: | |||||
case NEControlCmd.restorefactorysettings: | |||||
case NEControlCmd.interruptrequest: | |||||
case NEControlCmd.OpenMonitoring: | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
protected override void ToBuffer() | |||||
{ | |||||
if (CmdID == NEControlCmd.remoteupdate) | |||||
{ | |||||
var contentLength = NEConfigs.NEEncoding.GetBytes(CmdParameter).Length; | |||||
Buffer = new byte[6 + 1 + contentLength]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
Buffer.WriteLittle(CmdID.ToByteValue(), 6); | |||||
Buffer.WriteLittle(CmdParameter, 7); | |||||
} | |||||
else if (CmdID == NEControlCmd.warning) { | |||||
Buffer = new byte[6 + 1 + 1]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
Buffer.WriteLittle(CmdID.ToByteValue(), 6); | |||||
Buffer.WriteLittle(CmdParameter.ToEnum<NEAlarmLevel>().ToByteValue(), 7); | |||||
} | |||||
else | |||||
{ | |||||
Buffer = new byte[6 + 1]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
Buffer.WriteLittle(CmdID.ToByteValue(), 6); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,23 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Response | |||||
{ | |||||
public class NELoginDownStream : NEBodies | |||||
{ | |||||
protected NELoginDownStream(byte[] buffer) : base(buffer) | |||||
{ | |||||
} | |||||
protected NELoginDownStream(string vin) : base(vin) | |||||
{ | |||||
} | |||||
public override void ToBuffer() | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
} | |||||
} |
@@ -1,38 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.DownStream | |||||
{ | |||||
/// <summary> | |||||
/// 查询命令 | |||||
/// </summary> | |||||
public class NEQueryDownStream : NEBodies | |||||
{ | |||||
public NEQueryDownStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
public NEQueryDownStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6); | |||||
} | |||||
protected override void ToBuffer() | |||||
{ | |||||
Buffer = new byte[6]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
} | |||||
} | |||||
} |
@@ -1,37 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.DownStream | |||||
{ | |||||
/// <summary> | |||||
/// 设置命令 | |||||
/// </summary> | |||||
public class NESettingsDownStream : NEBodies | |||||
{ | |||||
public NESettingsDownStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
public NESettingsDownStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6); | |||||
} | |||||
protected override void ToBuffer() | |||||
{ | |||||
Buffer = new byte[6]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
} | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 报警等级 | |||||
/// </summary> | |||||
public enum NEAlarmLevel:byte | |||||
{ | |||||
无报警 = 0x00, | |||||
一级报警 = 0x01, | |||||
二级报警 = 0x02, | |||||
三级报警 = 0x03, | |||||
无效数据 = 0xFF | |||||
} | |||||
} |
@@ -1,29 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 应答标志 | |||||
/// </summary> | |||||
public enum NEAskId:byte | |||||
{ | |||||
/// <summary> | |||||
/// 接收到的信息正确 | |||||
/// </summary> | |||||
success=0x01, | |||||
/// <summary> | |||||
/// 设置未成功 | |||||
/// </summary> | |||||
error=0x02, | |||||
/// <summary> | |||||
/// VIN重复错误 | |||||
/// </summary> | |||||
vin_repeat_error=0x03, | |||||
/// <summary> | |||||
/// 数据包为命令包,而非应答包 | |||||
/// </summary> | |||||
cmd=0xFE | |||||
} | |||||
} |
@@ -1,55 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 车载终端控制命令枚举 | |||||
/// 0x80-0x7F 预留 | |||||
/// 0x80-0xFE 用户自定义 | |||||
/// </summary> | |||||
public enum NEControlCmd:byte | |||||
{ | |||||
/// <summary> | |||||
/// 未用 | |||||
/// </summary> | |||||
unused= 0x00, | |||||
/// <summary> | |||||
/// 远程升级 见表B.16 | |||||
/// </summary> | |||||
remoteupdate = 0x01, | |||||
/// <summary> | |||||
/// 车载终端关机 | |||||
/// </summary> | |||||
shutdown = 0x02, | |||||
/// <summary> | |||||
/// 车载终端复位 | |||||
/// </summary> | |||||
reset = 0x03, | |||||
/// <summary> | |||||
/// 车载终端恢复出厂设置,其中包括本地存储时间周期、心跳发送时间周期、终端应答超时时间等等 | |||||
/// </summary> | |||||
restorefactorysettings = 0x04, | |||||
/// <summary> | |||||
/// 断开数据通信链路 | |||||
/// </summary> | |||||
interruptrequest = 0x05, | |||||
/// <summary> | |||||
/// 车载终端报警/预警,报警命令参数数据格式和定义见表B.17 | |||||
/// </summary> | |||||
warning = 0x06, | |||||
/// <summary> | |||||
/// 开启抽样检测链路 | |||||
/// </summary> | |||||
OpenMonitoring = 0x07, | |||||
} | |||||
} |
@@ -1,19 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 数据单元加密方式 | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | |||||
/// </summary> | |||||
public enum NEEncryptMethod:byte | |||||
{ | |||||
None= 0x01, | |||||
RSA= 0x02, | |||||
AES128=0x03, | |||||
Exception = 0xFE, | |||||
Invalid= 0xFF | |||||
} | |||||
} |
@@ -1,22 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
public enum NEErrorCode | |||||
{ | |||||
/// <summary> | |||||
/// 开始标识错误 | |||||
/// </summary> | |||||
BeginFlagError = 1001, | |||||
/// <summary> | |||||
/// BCC校验错误 | |||||
/// </summary> | |||||
BCCCodeError = 1002, | |||||
/// <summary> | |||||
/// 登入流水号错误 | |||||
/// </summary> | |||||
LoginSerialNoError=1003 | |||||
} | |||||
} |
@@ -1,25 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 信息类型标志 | |||||
/// </summary> | |||||
public enum NEInfoType:byte | |||||
{ | |||||
整车数据=0x01, | |||||
驱动电机数据=0x02, | |||||
燃料电池数据=0x03, | |||||
发动机数据=0x04, | |||||
车辆位置数据=0x05, | |||||
极值数据=0x06, | |||||
报警数据=0x07, | |||||
可充电储能装置电压数据=0x08, | |||||
可充电储能装置温度数据 = 0x09, | |||||
平台交换协议自定义数据 =0x0A, | |||||
预留=0x30, | |||||
用户自定义=0x80 | |||||
} | |||||
} |
@@ -1,57 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 命令单元 | |||||
/// </summary> | |||||
public enum NEMsgId:byte | |||||
{ | |||||
/// <summary> | |||||
/// 车辆登入 | |||||
/// </summary> | |||||
login = 0x01, | |||||
/// <summary> | |||||
/// 实时信息上传 | |||||
/// </summary> | |||||
uploadim = 0x02, | |||||
/// <summary> | |||||
/// 补传信息上传 | |||||
/// </summary> | |||||
uploadsup = 0x03, | |||||
/// <summary> | |||||
/// 车辆登出 | |||||
/// </summary> | |||||
loginout = 0x04, | |||||
/// <summary> | |||||
/// 平台登入 | |||||
/// </summary> | |||||
platformlogin = 0x05, | |||||
/// <summary> | |||||
/// 平台登出 | |||||
/// </summary> | |||||
platformlogout = 0x06, | |||||
/// <summary> | |||||
/// 心跳 | |||||
/// </summary> | |||||
heartbeat = 0x07, | |||||
/// <summary> | |||||
/// 终端校时 | |||||
/// </summary> | |||||
checktime = 0x08, | |||||
/// <summary> | |||||
/// 查询命令 | |||||
/// </summary> | |||||
query = 0x80, | |||||
/// <summary> | |||||
/// 设置命令 | |||||
/// </summary> | |||||
settings = 0x81, | |||||
/// <summary> | |||||
/// 控制命令 | |||||
/// </summary> | |||||
control = 0x82 | |||||
} | |||||
} |
@@ -1,23 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Exceptions | |||||
{ | |||||
public class NEException:Exception | |||||
{ | |||||
public NEException(NEErrorCode errorCode) : base(errorCode.ToString()) | |||||
{ | |||||
this.ErrorCode = errorCode; | |||||
} | |||||
public NEException(NEErrorCode errorCode, string message) : base(message) | |||||
{ | |||||
this.ErrorCode = errorCode; | |||||
} | |||||
public NEErrorCode ErrorCode { get; } | |||||
} | |||||
} |
@@ -1,135 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.ComponentModel; | |||||
using System.Reflection; | |||||
namespace GBNewEnergy.Protocol.Extensions | |||||
{ | |||||
/// <summary> | |||||
/// 枚举扩展 | |||||
/// </summary> | |||||
internal static class EnumExtensions | |||||
{ | |||||
/// <summary> | |||||
/// 转为整型 | |||||
/// </summary> | |||||
/// <typeparam name="T"></typeparam> | |||||
/// <param name="t"></param> | |||||
/// <returns></returns> | |||||
public static int ToValue<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToInt32(t); | |||||
} | |||||
/// <summary> | |||||
/// 转为Byte | |||||
/// </summary> | |||||
/// <typeparam name="T"></typeparam> | |||||
/// <param name="t"></param> | |||||
/// <returns></returns> | |||||
public static byte ToByteValue<T>(this T t) where T : struct | |||||
{ | |||||
return Convert.ToByte(t); | |||||
} | |||||
/// <summary> | |||||
/// 字符转枚举 | |||||
/// </summary> | |||||
/// <typeparam name="T"></typeparam> | |||||
/// <param name="value"></param> | |||||
/// <returns></returns> | |||||
public static T ToEnum<T>(this string value) where T : struct | |||||
{ | |||||
return (T)Enum.Parse(typeof(T), value); | |||||
} | |||||
/// <summary> | |||||
/// 获取枚举字符串 | |||||
/// </summary> | |||||
/// <param name="valueEnum"></param> | |||||
public static string GetName(this Enum valueEnum) | |||||
{ | |||||
return valueEnum.ToString(); | |||||
} | |||||
/// <summary> | |||||
/// 获取DescriptionAttribute特性枚举值的描述 | |||||
/// </summary> | |||||
/// <param name="value"></param> | |||||
/// <returns></returns> | |||||
public static string GetDescription(this Enum value) | |||||
{ | |||||
var attribute = value.GetAttribute<DescriptionAttribute>(); | |||||
return attribute == null ? value.ToString() : attribute.Description; | |||||
} | |||||
/// <summary> | |||||
/// 验证是否是枚举类型 | |||||
/// </summary> | |||||
/// <typeparam name="TEnum"></typeparam> | |||||
/// <param name="enumValue"></param> | |||||
/// <returns></returns> | |||||
public static bool IsEnumValid<TEnum>(this int enumValue) | |||||
{ | |||||
return Enum.IsDefined(typeof(TEnum), enumValue); | |||||
} | |||||
/// <summary> | |||||
/// 获取DescriptionAttribute特性枚举及描述 | |||||
/// </summary> | |||||
/// <param name="type"></param> | |||||
/// <returns></returns> | |||||
public static Dictionary<string, string> GetDescriptionAttributeDictionary(this Enum value) | |||||
{ | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string>(); | |||||
var fields = value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) | |||||
{ | |||||
DescriptionAttribute attr = Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute), false) as DescriptionAttribute; | |||||
dictionary.Add(fi.Name, attr != null ? attr.Description : ""); | |||||
} | |||||
return dictionary; | |||||
} | |||||
/// <summary> | |||||
/// 获取DisplayNameAttribute特性枚举值的描述 | |||||
/// </summary> | |||||
/// <param name="obj">枚举值</param> | |||||
/// <returns></returns> | |||||
public static string GetDisplayName(this Enum value) | |||||
{ | |||||
var attribute = value.GetAttribute<DisplayNameAttribute>(); | |||||
return attribute == null ? value.ToString() : attribute.DisplayName; | |||||
} | |||||
/// <summary> | |||||
/// 获取DisplayNameAttribute特性枚举及描述 | |||||
/// </summary> | |||||
/// <param name="type"></param> | |||||
/// <returns></returns> | |||||
public static Dictionary<string, string> GetDisplayNameAttributeDictionary(this Enum value) | |||||
{ | |||||
Dictionary<string, string> dictionary = new Dictionary<string, string>(); | |||||
var fields = value.GetType().GetFields(BindingFlags.Static | BindingFlags.Public); | |||||
foreach (var fi in fields) | |||||
{ | |||||
DisplayNameAttribute attr = Attribute.GetCustomAttribute(fi, typeof(DisplayNameAttribute), false) as DisplayNameAttribute; | |||||
dictionary.Add(fi.Name, attr != null ? attr.DisplayName : ""); | |||||
} | |||||
return dictionary; | |||||
} | |||||
/// <summary> | |||||
/// 获取枚举对应特性 | |||||
/// </summary> | |||||
/// <typeparam name="T"></typeparam> | |||||
/// <param name="value"></param> | |||||
/// <returns></returns> | |||||
public static T GetAttribute<T>(this Enum value) where T : Attribute | |||||
{ | |||||
var type = value.GetType(); | |||||
var memberInfo = type.GetMember(value.ToString()); | |||||
var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false); | |||||
return (T)attributes[0]; | |||||
} | |||||
} | |||||
} |
@@ -1,139 +0,0 @@ | |||||
using System; | |||||
using System.IO; | |||||
using System.Linq; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.Extensions | |||||
{ | |||||
public static class NEExtensions | |||||
{ | |||||
/// <summary> | |||||
/// 日期限制于2000年 | |||||
/// </summary> | |||||
private const int DateLimitYear = 2000; | |||||
public static DateTime ReadDateTimeLittle(this byte[] read,int offset, int len) | |||||
{ | |||||
return new DateTime( | |||||
read[offset++] + DateLimitYear, | |||||
read[offset++], | |||||
read[offset++], | |||||
read[offset++], | |||||
read[offset++], | |||||
read[offset++]); | |||||
} | |||||
public static ushort ReadUShortH2LLittle(this byte[] read, int offset, int len) | |||||
{ | |||||
int result = 0; | |||||
for (int i = offset; i < offset + len; i++) | |||||
{ | |||||
result += read[i] * (int)Math.Pow(256, len + offset - i - 1); | |||||
} | |||||
return (ushort)result; | |||||
} | |||||
public static string ReadStringLittle(this byte[] read, int offset, int len,Encoding coding) | |||||
{ | |||||
return coding.GetString(read, offset, len).Trim('\0'); | |||||
} | |||||
public static string ReadStringLittle(this byte[] read, int offset, int len) | |||||
{ | |||||
return Encoding.ASCII.GetString(read, offset, len).Trim('\0'); | |||||
} | |||||
public static void WriteLittle(this byte[] write,string str, int offset, Encoding coding) | |||||
{ | |||||
byte[] strByte = coding.GetBytes(str); | |||||
Array.Copy(strByte, 0, write, offset, strByte.Length); | |||||
} | |||||
public static void WriteLittle(this byte[] write, string str, int offset) | |||||
{ | |||||
byte[] strByte = Encoding.ASCII.GetBytes(str); | |||||
Array.Copy(strByte, 0, write, offset, strByte.Length); | |||||
} | |||||
public static void WriteLittle(this byte[] write,int data ,int offset,int len) | |||||
{ | |||||
int n = 1; | |||||
for (int i = 0; i < len; i++) | |||||
{ | |||||
write[offset] = (byte)(data >> 8 * (len - n)); | |||||
n++; | |||||
offset++; | |||||
} | |||||
} | |||||
public static void WriteLittle(this byte[] write, ushort data, int offset, int len) | |||||
{ | |||||
int n = 1; | |||||
for (int i = 0; i < len; i++) | |||||
{ | |||||
write[offset] = (byte)(data >> 8 * (len - n)); | |||||
n++; | |||||
offset++; | |||||
} | |||||
} | |||||
public static void WriteLittle(this byte[] write, byte[] bytes, int offset, int len) | |||||
{ | |||||
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); | |||||
write[offset++] = (byte)date.Month; | |||||
write[offset++] = (byte)date.Day; | |||||
write[offset++] = (byte)date.Hour; | |||||
write[offset++] = (byte)date.Minute; | |||||
write[offset++] = (byte)date.Second; | |||||
} | |||||
/// <summary> | |||||
/// 异或 | |||||
/// </summary> | |||||
/// <param name="buf"></param> | |||||
/// <param name="offset"></param> | |||||
/// <param name="len"></param> | |||||
/// <returns></returns> | |||||
public static byte ToXor(this byte[] buf, int offset, int len) | |||||
{ | |||||
byte result = buf[offset]; | |||||
for (int i = offset + 1; i < offset + len; i++) | |||||
{ | |||||
result = (byte)(result ^ buf[i]); | |||||
} | |||||
return result; | |||||
} | |||||
/// <summary> | |||||
/// 字节数组转16进制字符串 | |||||
/// </summary> | |||||
/// <param name="bytes"></param> | |||||
/// <param name="separator">默认 " "</param> | |||||
/// <returns></returns> | |||||
public static string ToHexString(this byte[] bytes,string separator=" ") | |||||
{ | |||||
return string.Join(separator, bytes.Select(s => s.ToString("X2"))); | |||||
} | |||||
/// <summary> | |||||
/// 16进制字符串转16进制数组 | |||||
/// </summary> | |||||
/// <param name="hexString"></param> | |||||
/// <param name="separator"></param> | |||||
/// <returns></returns> | |||||
public static byte[] ToHexBytes(this string hexString, string separator = " ") | |||||
{ | |||||
return hexString.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToByte(s, 16)).ToArray(); | |||||
} | |||||
} | |||||
} |
@@ -1,30 +0,0 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<TargetFrameworks>netstandard2.0;net40;net45</TargetFrameworks> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Compile Remove="DownStream\NELoginDownStream.cs" /> | |||||
<Compile Remove="IBuffer.cs" /> | |||||
<Compile Remove="IBuffered.cs" /> | |||||
<Compile Remove="NEDownStreamBase.cs" /> | |||||
<Compile Remove="NEEncryptFactory.cs" /> | |||||
<Compile Remove="NEEncrypts\NEAES128EncryptImpl_NetCore2.cs" /> | |||||
<Compile Remove="NEHeader.cs" /> | |||||
<Compile Remove="NEUpStreamBase.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' "> | |||||
</ItemGroup> | |||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' "> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Folder Include="Properties\" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -1,12 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public interface INEEncrypt | |||||
{ | |||||
byte[] Encrypt(byte[] buffer); | |||||
byte[] Decrypt(byte[] buffer); | |||||
} | |||||
} |
@@ -1,14 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public interface INEParameter | |||||
{ | |||||
/// <summary> | |||||
/// 车架号 | |||||
/// </summary> | |||||
string VIN { get; set; } | |||||
} | |||||
} |
@@ -1,10 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public interface INEProperties:INEParameter | |||||
{ | |||||
} | |||||
} |
@@ -1,56 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public abstract class NEBodies : NEBufferedEntityBase | |||||
{ | |||||
/// <summary> | |||||
/// 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> | |||||
/// 登入流水号 | |||||
/// 作用:看数据是否是连续请求 | |||||
/// </summary> | |||||
public ushort LoginNum { get; set; } | |||||
/// <summary> | |||||
/// 数据采集时间 | |||||
/// 采用北京时间 | |||||
/// </summary> | |||||
public DateTime CurrentDateTime { get; set; } = DateTime.Now; | |||||
protected NEBodies(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) { } | |||||
protected NEBodies(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) { } | |||||
protected class LoginInfo | |||||
{ | |||||
public ushort LoginNum { get; set; } | |||||
public DateTime ExpirationTime { get; set; } | |||||
} | |||||
protected class PlatformLoginInfo | |||||
{ | |||||
public ushort LoginNum { get; set; } | |||||
public DateTime ExpirationTime { get; set; } | |||||
} | |||||
} | |||||
} |
@@ -1,43 +0,0 @@ | |||||
using GBNewEnergy.Protocol.DownStream; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.UpStream; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public class NEBodiesFactory | |||||
{ | |||||
/// <summary> | |||||
/// 通过命令id获取数据体 | |||||
/// </summary> | |||||
/// <param name="msgId"></param> | |||||
/// <param name="buf"></param> | |||||
/// <returns></returns> | |||||
public static NEBodies GetNEBodiesByMsgId(NEMsgId msgId,byte[] buf, NEGlobalConfigs nEConfigs) | |||||
{ | |||||
switch (msgId) | |||||
{ | |||||
case NEMsgId.login: | |||||
return new NELoginUpStream(buf, nEConfigs); | |||||
case NEMsgId.uploadim: | |||||
return new NERealUploadUpStream(buf, nEConfigs); | |||||
case NEMsgId.loginout: | |||||
return new NELogoutUpStream(buf, nEConfigs); | |||||
case NEMsgId.platformlogin: | |||||
return new NEPlatformLoginUpStream(buf, nEConfigs); | |||||
case NEMsgId.platformlogout: | |||||
return new NEPlatformLogoutUpStream(buf, nEConfigs); | |||||
case NEMsgId.control: | |||||
return new NEControlDownStream(buf, nEConfigs); | |||||
case NEMsgId.settings: | |||||
case NEMsgId.heartbeat: | |||||
case NEMsgId.checktime: | |||||
return new CommonUpStream(buf, nEConfigs); | |||||
default: | |||||
return null; | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,41 +0,0 @@ | |||||
using System; | |||||
using System.IO; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public abstract class NEBufferedEntityBase | |||||
{ | |||||
public byte[] Buffer { get; protected set; } | |||||
public NEGlobalConfigs NEConfigs { get;} | |||||
protected NEBufferedEntityBase(byte[] buffer, NEGlobalConfigs nEConfigs) | |||||
{ | |||||
NEConfigs = nEConfigs; | |||||
Buffer = buffer; | |||||
InitializePropertiesFromBuffer(); | |||||
} | |||||
protected NEBufferedEntityBase(byte[] headerBuffer, byte[] bodyBuffer, NEGlobalConfigs nEConfigs) | |||||
{ | |||||
NEConfigs = nEConfigs; | |||||
Buffer = new byte[headerBuffer.Length + bodyBuffer.Length]; | |||||
Array.Copy(headerBuffer, 0, Buffer, 0, headerBuffer.Length); | |||||
Array.Copy(bodyBuffer, 0, Buffer, headerBuffer.Length, bodyBuffer.Length); | |||||
InitializePropertiesFromBuffer(); | |||||
} | |||||
protected NEBufferedEntityBase(INEProperties nEProperties,NEGlobalConfigs nEConfigs) | |||||
{ | |||||
NEConfigs = nEConfigs; | |||||
InitializeProperties(nEProperties); | |||||
ToBuffer(); | |||||
} | |||||
protected abstract void InitializeProperties(INEProperties nEProperties); | |||||
protected abstract void ToBuffer(); | |||||
protected abstract void InitializePropertiesFromBuffer(); | |||||
} | |||||
} |
@@ -1,11 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public abstract class NEDownStreamBase | |||||
{ | |||||
} | |||||
} |
@@ -1,28 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.NEEncrypts; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
internal class NEEncryptFactory | |||||
{ | |||||
internal static INEEncrypt GetNEEncrypt(NEEncryptMethod nEEncryptMethod, NEGlobalConfigs nEConfigs) | |||||
{ | |||||
switch (nEEncryptMethod) | |||||
{ | |||||
case NEEncryptMethod.None: | |||||
case NEEncryptMethod.Invalid: | |||||
case NEEncryptMethod.Exception: | |||||
return null; | |||||
case NEEncryptMethod.AES128: | |||||
return new NEAES128EncryptImpl(nEConfigs); | |||||
case NEEncryptMethod.RSA: | |||||
return new NERSAEncryptImpl(nEConfigs); | |||||
default: | |||||
return null; | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,58 +0,0 @@ | |||||
using System.IO; | |||||
using System.Security.Cryptography; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public class Default_NEAES128EncryptImpl : NEAESBase | |||||
{ | |||||
public override string PrivateKey { get; } | |||||
public override byte[] SaltBytes { get; } | |||||
public Default_NEAES128EncryptImpl(string privateKey) | |||||
{ | |||||
PrivateKey = privateKey; | |||||
SaltBytes = new byte[9] { 13, 34, 27, 67, 189, 255, 104, 219, 122 }; | |||||
} | |||||
public Default_NEAES128EncryptImpl(string privateKey, byte[] saltBytes) | |||||
{ | |||||
PrivateKey = privateKey; | |||||
SaltBytes = saltBytes; | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
using (Aes encryptor = Aes.Create()) | |||||
{ | |||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(PrivateKey, SaltBytes); | |||||
encryptor.Key = pdb.GetBytes(32); | |||||
encryptor.IV = pdb.GetBytes(16); | |||||
using (MemoryStream ms = new MemoryStream()) | |||||
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(),CryptoStreamMode.Write)) | |||||
{ | |||||
cs.Write(buffer, 0, buffer.Length); | |||||
cs.Close(); | |||||
return ms.ToArray(); | |||||
} | |||||
} | |||||
} | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
using (Aes encryptor = Aes.Create()) | |||||
{ | |||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(PrivateKey, SaltBytes); | |||||
encryptor.Key = pdb.GetBytes(32); | |||||
encryptor.IV = pdb.GetBytes(16); | |||||
using (MemoryStream ms = new MemoryStream()) | |||||
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(),CryptoStreamMode.Write)) | |||||
{ | |||||
cs.Write(buffer, 0, buffer.Length); | |||||
cs.Close(); | |||||
return ms.ToArray(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,193 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.IO; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
using System.Xml; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
#if NETSTANDARD2_0 | |||||
public class Default_NERSAEncryptImpl : NERSABase | |||||
{ | |||||
private readonly RSA _privateKeyRsaProvider; | |||||
private readonly RSA _publicKeyRsaProvider; | |||||
private readonly Encoding _encoding; | |||||
public override string HashAlgorithmStr=>throw new NotImplementedException(); | |||||
public override string PublicKey { get; } | |||||
public override string PrivateKey { get; } | |||||
public override HashAlgorithmName HashAlgorithmName { get; } | |||||
public Default_NERSAEncryptImpl(Encoding encoding, HashAlgorithmName hashAlgorithmName, string publicKey, string privateKey) | |||||
{ | |||||
_privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey); | |||||
_publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey); | |||||
HashAlgorithmName = hashAlgorithmName; | |||||
_encoding = encoding; | |||||
PublicKey = publicKey; | |||||
PrivateKey = privateKey; | |||||
} | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
return _privateKeyRsaProvider.Decrypt(buffer, RSAEncryptionPadding.Pkcs1); | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
return _publicKeyRsaProvider.Encrypt(buffer, RSAEncryptionPadding.Pkcs1); | |||||
} | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public override string Sign(string data) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
var signatureBytes = _privateKeyRsaProvider.SignData(dataBytes, HashAlgorithmName, RSASignaturePadding.Pkcs1); | |||||
return Convert.ToBase64String(signatureBytes); | |||||
} | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public override bool Verify(string data, string sign) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] signBytes = Convert.FromBase64String(sign); | |||||
var verify = _publicKeyRsaProvider.VerifyData(dataBytes, signBytes, HashAlgorithmName, RSASignaturePadding.Pkcs1); | |||||
return verify; | |||||
} | |||||
private RSA CreateRsaProviderFromPublicKey(string publicKeyString) | |||||
{ | |||||
var rsa = RSA.Create(); | |||||
FromXmlStringExtensions(rsa,publicKeyString); | |||||
return rsa; | |||||
} | |||||
private RSA CreateRsaProviderFromPrivateKey(string privateKey) | |||||
{ | |||||
var rsa = RSA.Create(); | |||||
FromXmlStringExtensions(rsa, privateKey); | |||||
return rsa; | |||||
} | |||||
private int GetIntegerSize(BinaryReader binr) | |||||
{ | |||||
byte bt = 0; | |||||
int count = 0; | |||||
bt = binr.ReadByte(); | |||||
if (bt != 0x02) | |||||
return 0; | |||||
bt = binr.ReadByte(); | |||||
if (bt == 0x81) | |||||
count = binr.ReadByte(); | |||||
else | |||||
if (bt == 0x82) | |||||
{ | |||||
var highbyte = binr.ReadByte(); | |||||
var lowbyte = binr.ReadByte(); | |||||
byte[] modint = { lowbyte, highbyte, 0x00, 0x00 }; | |||||
count = BitConverter.ToInt32(modint, 0); | |||||
} | |||||
else | |||||
{ | |||||
count = bt; | |||||
} | |||||
while (binr.ReadByte() == 0x00) | |||||
{ | |||||
count -= 1; | |||||
} | |||||
binr.BaseStream.Seek(-1, SeekOrigin.Current); | |||||
return count; | |||||
} | |||||
private bool CompareBytearrays(byte[] a, byte[] b) | |||||
{ | |||||
if (a.Length != b.Length) | |||||
return false; | |||||
int i = 0; | |||||
foreach (byte c in a) | |||||
{ | |||||
if (c != b[i]) | |||||
return false; | |||||
i++; | |||||
} | |||||
return true; | |||||
} | |||||
private static void FromXmlStringExtensions(RSA rsa, string xmlString) | |||||
{ | |||||
var parameters = new RSAParameters(); | |||||
var xmlDoc = new XmlDocument(); | |||||
xmlDoc.LoadXml(xmlString); | |||||
if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue")) | |||||
{ | |||||
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes) | |||||
{ | |||||
switch (node.Name) | |||||
{ | |||||
case "Modulus": | |||||
parameters.Modulus = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "Exponent": | |||||
parameters.Exponent = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "P": | |||||
parameters.P = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "Q": | |||||
parameters.Q = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "DP": | |||||
parameters.DP = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "DQ": | |||||
parameters.DQ = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "InverseQ": | |||||
parameters.InverseQ = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "D": | |||||
parameters.D = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
throw new Exception("Invalid XML RSA key."); | |||||
} | |||||
rsa.ImportParameters(parameters); | |||||
} | |||||
} | |||||
#endif | |||||
} |
@@ -1,90 +0,0 @@ | |||||
using System; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public class Default_NERSAEncryptImpl_NET : NERSABase | |||||
{ | |||||
private readonly Encoding _encoding; | |||||
public Default_NERSAEncryptImpl_NET(Encoding encoding,string hashAlgorithmStr, string publicKey, string privateKey) | |||||
{ | |||||
_encoding = encoding; | |||||
HashAlgorithmStr = hashAlgorithmStr; | |||||
PublicKey = publicKey; | |||||
PrivateKey = privateKey; | |||||
} | |||||
#if NETSTANDARD2_0 | |||||
public override HashAlgorithmName HashAlgorithmName => throw new NotImplementedException(); | |||||
#endif | |||||
public override string HashAlgorithmStr { get;} | |||||
public override string PublicKey { get; } | |||||
public override string PrivateKey { get;} | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
using (RSACryptoServiceProvider provider=new RSACryptoServiceProvider()) | |||||
{ | |||||
provider.FromXmlString(PrivateKey); | |||||
return provider.Decrypt(buffer, false); | |||||
} | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider()) | |||||
{ | |||||
provider.FromXmlString(PublicKey); | |||||
return provider.Encrypt(buffer, false); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public override string Sign(string data) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] rgbHash = HashAlgorithm.Create(HashAlgorithmStr).ComputeHash(dataBytes); | |||||
using (RSACryptoServiceProvider key = new RSACryptoServiceProvider()) | |||||
{ | |||||
key.FromXmlString(PrivateKey); | |||||
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key); | |||||
formatter.SetHashAlgorithm(HashAlgorithmStr); | |||||
byte[] inArray = formatter.CreateSignature(rgbHash); | |||||
return Convert.ToBase64String(inArray); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public override bool Verify(string data, string sign) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] signBytes = Convert.FromBase64String(sign); | |||||
byte[] rgbHash = HashAlgorithm.Create(HashAlgorithmStr).ComputeHash(dataBytes); | |||||
using (RSACryptoServiceProvider key = new RSACryptoServiceProvider()) | |||||
{ | |||||
key.FromXmlString(PublicKey); | |||||
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(key); | |||||
deformatter.SetHashAlgorithm(HashAlgorithmStr); | |||||
byte[] rgbSignature = Convert.FromBase64String(sign); | |||||
if (deformatter.VerifySignature(rgbHash, rgbSignature)) | |||||
{ | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -1,14 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public abstract class NEAESBase : INEEncrypt | |||||
{ | |||||
public abstract string PrivateKey { get; } | |||||
public abstract byte[] SaltBytes { get; } | |||||
public abstract byte[] Decrypt(byte[] buffer); | |||||
public abstract byte[] Encrypt(byte[] buffer); | |||||
} | |||||
} |
@@ -1,45 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public abstract class NERSABase : INEEncrypt | |||||
{ | |||||
public abstract byte[] Decrypt(byte[] buffer); | |||||
public abstract byte[] Encrypt(byte[] buffer); | |||||
#if NETSTANDARD2_0 | |||||
/// <summary> | |||||
/// dotnet core 使用 | |||||
/// </summary> | |||||
public abstract HashAlgorithmName HashAlgorithmName { get; } | |||||
#endif | |||||
/// <summary> | |||||
/// .net framework 使用 | |||||
/// 哈希算法 | |||||
/// MD5 new MD5CryptoServiceProvider() | |||||
/// SHA1 new SHA1CryptoServiceProvider() | |||||
/// SHA256 new SHA256CryptoServiceProvider() | |||||
/// SHA384 new SHA384CryptoServiceProvider() | |||||
/// SHA512 new SHA512CryptoServiceProvider() | |||||
/// </summary> | |||||
public abstract string HashAlgorithmStr { get; } | |||||
public abstract string PublicKey { get; } | |||||
public abstract string PrivateKey { get; } | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public abstract bool Verify(string data, string sign); | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public abstract string Sign(string data); | |||||
} | |||||
} |
@@ -1,27 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public class NEGlobalConfigs | |||||
{ | |||||
/// <summary> | |||||
/// 加密编码 | |||||
/// </summary> | |||||
public Encoding NEEncryptEncoding { get; set; } = Encoding.UTF8; | |||||
/// <summary> | |||||
/// 字符串编码 | |||||
/// </summary> | |||||
public Encoding NEEncoding { get; set; } = Encoding.UTF8; | |||||
/// <summary> | |||||
/// 数据单元加密方式 | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | |||||
/// </summary> | |||||
public NEEncryptMethod EncryptMethod { get; set; } = NEEncryptMethod.None; | |||||
/// <summary> | |||||
/// 数据单元加密 | |||||
/// 当数据单元存在加密时,应先加密后校验,先校验后解密 | |||||
/// </summary> | |||||
public INEEncrypt Encrypt { get; set; } | |||||
} | |||||
} |
@@ -1,40 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.Exceptions; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
/// <summary> | |||||
/// 头部 | |||||
/// </summary> | |||||
public class NEHeader: BufferedEntityBase | |||||
{ | |||||
public NEHeader(byte[] buffer):base(buffer) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// 起始符 | |||||
/// </summary> | |||||
public const byte BeginFlag = 0x23; | |||||
/// <summary> | |||||
/// 命令标识 | |||||
/// </summary> | |||||
public MsgId MsgId { get; private set; } | |||||
/// <summary> | |||||
/// 应答标志 | |||||
/// </summary> | |||||
public AskId AskId { get; private set; } | |||||
/// <summary> | |||||
/// 车辆识别码 | |||||
/// </summary> | |||||
public string VIN { get; private set; } | |||||
/// <summary> | |||||
/// 数据加密方式 | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | |||||
/// </summary> | |||||
public EncryptMethod EncryptMethod { get; private set; } | |||||
} | |||||
} |
@@ -1,143 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using GBNewEnergy.Protocol.Exceptions; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using System; | |||||
using System.IO; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
/// <summary> | |||||
/// 新能源包 | |||||
/// </summary> | |||||
public class NEPackage : NEBufferedEntityBase | |||||
{ | |||||
public NEPackage(byte[] header, byte[] body, NEGlobalConfigs nEConfigs) : base(header, body, nEConfigs) | |||||
{ | |||||
} | |||||
public NEPackage(byte[] buf, NEGlobalConfigs nEConfigs) : base(buf, nEConfigs) | |||||
{ | |||||
} | |||||
public NEPackage(INEProperties nEProperties, NEGlobalConfigs nEConfigs) | |||||
: base(nEProperties, nEConfigs) | |||||
{ } | |||||
/// <summary> | |||||
/// 固定为24个字节长度 | |||||
/// </summary> | |||||
public const int HeaderFixedByteLength = 24; | |||||
/// <summary> | |||||
/// 起始符 | |||||
/// </summary> | |||||
public const byte BeginFlag = 0x23; | |||||
/// <summary> | |||||
/// 校验位1字节 | |||||
/// </summary> | |||||
private const int CheckBit = 1; | |||||
/// <summary> | |||||
/// 命令标识 | |||||
/// </summary> | |||||
public NEMsgId MsgId { get; private set; } | |||||
/// <summary> | |||||
/// 应答标志 | |||||
/// </summary> | |||||
public NEAskId AskId { get; private set; } | |||||
/// <summary> | |||||
/// 车辆识别码 | |||||
/// </summary> | |||||
public string VIN { get; private set; } | |||||
/// <summary> | |||||
/// 数据加密方式 | |||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | |||||
/// </summary> | |||||
public NEEncryptMethod EncryptMethod { get; private set; } | |||||
/// <summary> | |||||
/// 数据单元长度是数据单元的总字节数,有效值范围:0-65531 | |||||
/// </summary> | |||||
public int DataUnitLength { get; private set; } | |||||
/// <summary> | |||||
/// 采用BCC(异或检验)法,校验范围从命令单元的第一个字节开始,同后一个字节异或,直到校验码前一个字节为止, | |||||
/// 校验码占用一个字节,当数据单元存在加密时,应先加密后检验,先校验后解密 | |||||
/// </summary> | |||||
public byte BCCCode { get; private set; } | |||||
/// <summary> | |||||
/// 头数据 | |||||
/// </summary> | |||||
public byte[] Header { get; private set; } | |||||
/// <summary> | |||||
/// 数据体 | |||||
/// </summary> | |||||
public NEBodies Bodies { get; protected set; } | |||||
protected override void ToBuffer() | |||||
{ | |||||
// 固定单元长度 | |||||
DataUnitLength = Bodies.Buffer.Length; | |||||
Buffer = new byte[HeaderFixedByteLength + DataUnitLength + CheckBit]; | |||||
Buffer[0] = BeginFlag; | |||||
Buffer[1] = BeginFlag; | |||||
Buffer[2] = (byte)MsgId; | |||||
Buffer[3] = (byte)AskId; | |||||
Buffer.WriteLittle(VIN, 4); | |||||
Buffer[21] = (byte)EncryptMethod; | |||||
Buffer.WriteLittle(DataUnitLength, 22, 2); | |||||
if (NEConfigs.Encrypt != null) | |||||
{ | |||||
Buffer.WriteLittle(NEConfigs.Encrypt.Encrypt(Bodies.Buffer), 24, DataUnitLength); | |||||
} | |||||
else | |||||
{ | |||||
Buffer.WriteLittle(Bodies.Buffer, 24, DataUnitLength); | |||||
} | |||||
BCCCode = Buffer.ToXor(2, (HeaderFixedByteLength + DataUnitLength - 1)); | |||||
Buffer[HeaderFixedByteLength + DataUnitLength] = BCCCode; | |||||
Header = new byte[HeaderFixedByteLength]; | |||||
Array.Copy(Buffer, 0, Header, 0, HeaderFixedByteLength); | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
NEPackageProperty nEPackageProperty = (NEPackageProperty)nEProperties; | |||||
VIN = nEPackageProperty.VIN; | |||||
MsgId = nEPackageProperty.MsgId; | |||||
AskId = nEPackageProperty.AskId; | |||||
Bodies = nEPackageProperty.Bodies; | |||||
EncryptMethod = NEConfigs.EncryptMethod; | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
if (Buffer[0] != BeginFlag && Buffer[1] == BeginFlag) throw new NEException(NEErrorCode.BeginFlagError, $"{Buffer[0]},{Buffer[1]}"); | |||||
MsgId = (NEMsgId)Buffer[2]; | |||||
AskId = (NEAskId)Buffer[3]; | |||||
VIN = Buffer.ReadStringLittle(4, 17); | |||||
EncryptMethod = (NEEncryptMethod)Buffer[21]; | |||||
DataUnitLength = Buffer.ReadUShortH2LLittle(22, 2); | |||||
// 2.4. 验证校验码 | |||||
// 进行BCC校验码 | |||||
// 校验位 = 报文长度 - 最后一位(校验位) - 偏移量(2) | |||||
int checkBit = Buffer.Length - CheckBit - 2; | |||||
byte bCCCode = Buffer.ToXor(2, checkBit); | |||||
byte bCCCode2 = Buffer[Buffer.Length - CheckBit]; | |||||
if (bCCCode != bCCCode2) | |||||
{ | |||||
throw new NEException(NEErrorCode.BCCCodeError, $"request:{bCCCode2}!=calculate:{bCCCode}"); | |||||
} | |||||
BCCCode = bCCCode2; | |||||
byte[] bodiesBytes = new byte[DataUnitLength + CheckBit]; | |||||
Array.Copy(Buffer, HeaderFixedByteLength, bodiesBytes, 0, bodiesBytes.Length); | |||||
if (NEConfigs.Encrypt != null) | |||||
{ | |||||
Bodies = NEBodiesFactory.GetNEBodiesByMsgId(MsgId, NEConfigs.Encrypt.Decrypt(bodiesBytes),NEConfigs); | |||||
} | |||||
else | |||||
{ | |||||
Bodies = NEBodiesFactory.GetNEBodiesByMsgId(MsgId, bodiesBytes, NEConfigs); | |||||
} | |||||
Header = new byte[HeaderFixedByteLength]; | |||||
Array.Copy(Buffer, 0, Header, 0, HeaderFixedByteLength); | |||||
} | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
/// <summary> | |||||
/// 控制命令 报警、预警 | |||||
/// </summary> | |||||
public class NEControlAlarmParameter | |||||
{ | |||||
/// <summary> | |||||
/// 报警等级 | |||||
/// </summary> | |||||
public NEAlarmLevel nEAlarmLevel { get; set; } | |||||
} | |||||
} |
@@ -1,27 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
/// <summary> | |||||
/// 控制命令属性 | |||||
/// </summary> | |||||
public class NEControlProperty : INEProperties | |||||
{ | |||||
public string VIN { get; set ; } | |||||
/// <summary> | |||||
/// 命令ID 只能发送一个 | |||||
/// </summary> | |||||
public NEControlCmd CmdID { get; set; } | |||||
/// <summary> | |||||
/// 升级参数 | |||||
/// </summary> | |||||
public NEControlUpgradeParameter UpgradeParameter { get; set; } | |||||
/// <summary> | |||||
/// 报警,预警参数 | |||||
/// </summary> | |||||
public NEControlAlarmParameter AlarmParameter { get; set; } | |||||
} | |||||
} |
@@ -1,57 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
/// <summary> | |||||
/// 控制命令,升级 | |||||
/// </summary> | |||||
public class NEControlUpgradeParameter | |||||
{ | |||||
/// <summary> | |||||
/// URL地址 | |||||
/// </summary> | |||||
public string Url { get; set; } | |||||
/// <summary> | |||||
/// 拨号点名称 | |||||
/// </summary> | |||||
public string DialPointName { get; set; } | |||||
/// <summary> | |||||
/// 拨号用户名 | |||||
/// </summary> | |||||
public string DialUserName { get; set; } | |||||
/// <summary> | |||||
/// 拨号密码 | |||||
/// </summary> | |||||
public string DialPassword { get; set; } | |||||
/// <summary> | |||||
/// 服务器地址 | |||||
/// </summary> | |||||
public string ServerUrl { get; set; } | |||||
/// <summary> | |||||
/// 服务器端口 | |||||
/// </summary> | |||||
public string ServerPort { get; set; } | |||||
/// <summary> | |||||
/// 生产厂商代码 | |||||
/// </summary> | |||||
public string ProviderCode { get; set; } | |||||
/// <summary> | |||||
/// 硬件版本 | |||||
/// </summary> | |||||
public string HardwareVersion { get; set; } | |||||
/// <summary> | |||||
/// 固件版本 | |||||
/// </summary> | |||||
public string FirmwareVersion { get; set; } | |||||
/// <summary> | |||||
/// 升级服务器时限 | |||||
/// </summary> | |||||
public string UpLimitTime { get; set; } | |||||
public override string ToString() | |||||
{ | |||||
return $"{Url};{DialPointName};{DialUserName};{DialPassword};{ServerUrl};{ServerPort};{ProviderCode};{HardwareVersion};{FirmwareVersion};{UpLimitTime}"; | |||||
} | |||||
} | |||||
} |
@@ -1,14 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
/// <summary> | |||||
/// 空包属性 | |||||
/// </summary> | |||||
public class NEEmptyProperty : INEProperties | |||||
{ | |||||
public string VIN { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } | |||||
} | |||||
} |
@@ -1,19 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
public class NELoginProperty : INEProperties | |||||
{ | |||||
public string VIN { get; set; } | |||||
public string SIM { get; set; } | |||||
public byte BatteryCount { get; set; } | |||||
public byte BatteryLength { get; set; } | |||||
public IEnumerable<string> BatteryNos { get; set;} | |||||
} | |||||
} |
@@ -1,11 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
public class NELogoutProperty : INEProperties | |||||
{ | |||||
public string VIN { get; set; } | |||||
} | |||||
} |
@@ -1,15 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties | |||||
{ | |||||
public class NEPackageProperty : INEProperties | |||||
{ | |||||
public string VIN { get; set; } | |||||
public NEMsgId MsgId { get; set; } | |||||
public NEAskId AskId { get; set; } | |||||
public NEBodies Bodies { get; set; } | |||||
} | |||||
} |
@@ -1,27 +0,0 @@ | |||||
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; } | |||||
} | |||||
} |
@@ -1,16 +0,0 @@ | |||||
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; } | |||||
} | |||||
} |
@@ -1,60 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 报警数据 | |||||
/// </summary> | |||||
public class NEUploadAlarmProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.报警数据; | |||||
/// <summary> | |||||
/// 报警等级 | |||||
/// </summary> | |||||
public byte AlarmLevel { get; set; } | |||||
/// <summary> | |||||
/// 通用报警标志 | |||||
/// </summary> | |||||
public int AlarmBatteryFlag { get; set; } | |||||
/// <summary> | |||||
/// 报警没变化 0,有报警 1 | |||||
/// </summary> | |||||
public byte AlarmBatteryChanged { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能装置故障总数 | |||||
/// </summary> | |||||
public byte AlarmBatteryOtherCount { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能装置故障代码列表 | |||||
/// </summary> | |||||
public List<int> AlarmBatteryOtherList { get; set; } = new List<int>(); | |||||
/// <summary> | |||||
/// 驱动电机故障总数 | |||||
/// </summary> | |||||
public byte AlarmElCount { get; set; } | |||||
/// <summary> | |||||
/// 驱动电机故障代码列表 | |||||
/// </summary> | |||||
public List<int> AlarmElList { get; set; } = new List<int>(); | |||||
/// <summary> | |||||
/// 发动机故障总数 | |||||
/// </summary> | |||||
public byte AlarmEngineCount { get; set; } | |||||
/// <summary> | |||||
/// 发动机故障列表 | |||||
/// </summary> | |||||
public List<int>AlarmEngineList { get; set; } = new List<int>(); | |||||
/// <summary> | |||||
/// 其他故障总数 | |||||
/// </summary> | |||||
public byte AlarmOtherCount { get; set; } | |||||
/// <summary> | |||||
/// 其他故障代码列表 | |||||
/// </summary> | |||||
public List<int> AlarmOtherList { get; set; } = new List<int>(); | |||||
} | |||||
} |
@@ -1,63 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 驱动电机数据 | |||||
/// </summary> | |||||
public class NEUploadDrivenElectricalProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.驱动电机数据; | |||||
/// <summary> | |||||
/// 电机个数 | |||||
/// </summary> | |||||
public byte ElectricalCount; | |||||
/// <summary> | |||||
/// 电机信息集合 | |||||
/// </summary> | |||||
public IEnumerable<ElectricalInfo> ElectricalList { get; set; } | |||||
/// <summary> | |||||
/// 电机信息 | |||||
/// </summary> | |||||
public class ElectricalInfo | |||||
{ | |||||
/// <summary> | |||||
/// 电机序号 | |||||
/// </summary> | |||||
public byte ElNo { get; set; } | |||||
/// <summary> | |||||
/// 电机状态 | |||||
/// </summary> | |||||
public byte ElStatus { get; set; } | |||||
/// <summary> | |||||
/// 电机控制器温度 | |||||
/// </summary> | |||||
public int ElControlTemp { get; set; } | |||||
/// <summary> | |||||
/// 电机转速 | |||||
/// </summary> | |||||
public int ElSpeed { get; set; } | |||||
/// <summary> | |||||
/// 电机转矩 | |||||
/// </summary> | |||||
public double ElTorque { get; set; } | |||||
/// <summary> | |||||
/// 电机温度 | |||||
/// </summary> | |||||
public int ElTemp { get; set; } | |||||
/// <summary> | |||||
/// 电机电压 | |||||
/// </summary> | |||||
public double ElVoltage { get; set; } | |||||
/// <summary> | |||||
/// 电机母线电流 | |||||
/// </summary> | |||||
public double ElCurrent { get; set; } | |||||
} | |||||
} | |||||
} |
@@ -1,60 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 可充电储能装置电压数据 | |||||
/// </summary> | |||||
public class NEUploadEnergyStorageProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.可充电储能装置电压数据; | |||||
/// <summary> | |||||
/// 可充电储能子系统个数 | |||||
/// </summary> | |||||
public byte BatteryAssemblyCount { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能子系统电压信息列表 | |||||
/// </summary> | |||||
public List<BatteryAssembly> BatteryAssemblyList { get; set; } = new List<BatteryAssembly>(); | |||||
/// <summary> | |||||
/// 每个电池总成数据 | |||||
/// </summary> | |||||
public class BatteryAssembly | |||||
{ | |||||
/// <summary> | |||||
/// 可充电储能子系统号 | |||||
/// </summary> | |||||
public byte BatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能装置电压 | |||||
/// </summary> | |||||
public double BatteryAssemblyVoltage { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能装置电流 | |||||
/// </summary> | |||||
public double BatteryAssemblyCurrent { get; set; } | |||||
/// <summary> | |||||
/// 单体电池总数 | |||||
/// </summary> | |||||
public int SingleBatteryCount { get; set; } | |||||
/// <summary> | |||||
/// 本帧起始电池序号 | |||||
/// </summary> | |||||
public int ThisSingleBatteryBeginNo { get; set; } | |||||
/// <summary> | |||||
/// /本帧单体电池总数 | |||||
/// </summary> | |||||
public int ThisSingleBatteryBeginCount { get; set; } | |||||
/// <summary> | |||||
/// 单体电池电压 | |||||
/// </summary> | |||||
public List<double> SingleBatteryVoltageList { get; set; } = new List<double>(); | |||||
} | |||||
} | |||||
} |
@@ -1,43 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 可充电储能装置温度数据 | |||||
/// </summary> | |||||
public class NEUploadEnergyStorageTemperatureProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.可充电储能装置温度数据; | |||||
/// <summary> | |||||
/// 动力蓄电池总成个数 | |||||
/// </summary> | |||||
public byte BatteryAssemblyCount { get; set; } | |||||
/// <summary> | |||||
/// 每个可充电储能子系统温度信息长度 | |||||
/// </summary> | |||||
public List<BatteryTemperature> BatteryAssemblyList { get; set; } = new List<BatteryTemperature>(); | |||||
/// <summary> | |||||
/// 每个动力蓄电池上温度数据 | |||||
/// </summary> | |||||
public class BatteryTemperature | |||||
{ | |||||
/// <summary> | |||||
/// 可充电储能子系统号 | |||||
/// </summary> | |||||
public byte BatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能温度探针个数 | |||||
/// </summary> | |||||
public int TemperatureProbeCount { get; set; } | |||||
/// <summary> | |||||
/// 可充电储能子系统各温度探针检测到的温度值 | |||||
/// </summary> | |||||
public List<int> TemperatureList { get; set; } = new List<int>(); | |||||
} | |||||
} | |||||
} |
@@ -1,39 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 发动机部分数据 | |||||
/// </summary> | |||||
public class NEUploadEnginePartProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.发动机数据; | |||||
/// <summary> | |||||
/// 发动机状态 | |||||
/// 0x01:启动状态 | |||||
/// 0x02:关闭状态 | |||||
/// 0xFE:异常 | |||||
/// 0xFF:无效 | |||||
/// </summary> | |||||
public byte EngineStatus { get; set; } | |||||
/// <summary> | |||||
/// 曲轴转速 | |||||
/// 有效范围:0-60000(表示0 r/min-60000 r/min) | |||||
/// 最小计量单元:1 r/min | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public int Revs { get; set; } | |||||
/// <summary> | |||||
/// 燃料消耗率 | |||||
/// 有效值范围:0-60000(表示0L/100km - 600L/100km) | |||||
/// 最小计量单元:0.01L/km | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double FuelRate { get; set; } | |||||
} | |||||
} |
@@ -1,94 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 极值数据 | |||||
/// </summary> | |||||
public class NEUploadExtremeProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.极值数据; | |||||
/// <summary> | |||||
/// 最高电压电池总成号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MaxVoltageBatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 最高电压电池单体代号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MaxVoltageSingleBatteryNo { get; set; } | |||||
/// <summary> | |||||
/// 电池单体电压最高值 | |||||
/// 有效值范围:0-15000(表示0V - 15V) | |||||
/// 最小计量单元:0.001V | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double MaxVoltageSingleBatteryValue { get; set; } | |||||
/// <summary> | |||||
/// 最低电压电池子系统号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MinVoltageBatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 最低电压电池单体代号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MinVoltageSingleBatteryNo { get; set; } | |||||
/// <summary> | |||||
/// 最低单体电压最低值 | |||||
/// 有效值范围:0-15000(表示0V - 15V) | |||||
/// 最小计量单元:0.001V | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double MinVoltageSingleBatteryValue { get; set; } | |||||
/// <summary> | |||||
/// 蓄电池中最高温度子系统号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MaxTempProbeBatteryNo { get; set; } | |||||
/// <summary> | |||||
/// 蓄电池中最高温度探针序号 | |||||
/// 有效值范围:1-250 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte MaxTempBatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 最高温度值 | |||||
/// 有效值范围:0-250(数值偏移量40℃,表示-40℃ - +210℃) | |||||
/// 最小计量单元:1℃ | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public int MaxTempProbeBatteryValue { get; set; } | |||||
/// <summary> | |||||
/// 最低温度子系统号 | |||||
/// </summary> | |||||
public byte MinTempProbeBatteryNo { get; set; } | |||||
/// <summary> | |||||
/// 蓄电池中最低温度探针序号 | |||||
/// </summary> | |||||
public byte MinTempBatteryAssemblyNo { get; set; } | |||||
/// <summary> | |||||
/// 最低温度值 | |||||
/// </summary> | |||||
public int MinTempProbeBatteryValue { get; set; } | |||||
} | |||||
} |
@@ -1,103 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 燃料电池数据 | |||||
/// </summary> | |||||
public class NEUploadFuelBatteryProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.燃料电池数据; | |||||
/// <summary> | |||||
/// 燃料电池电压 | |||||
/// 有效值范围:0 - 20000(表示 0V-2000V) | |||||
/// 最小计量单元:0.1V | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double FuelBatteryVoltage { get; set; } | |||||
/// <summary> | |||||
/// 燃料电池电流 | |||||
/// 有效值范围:0 - 20000(表示 0A- +2000A) | |||||
/// 最小计量单元:0.1 A | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double FuelBatteryCurrent { get; set; } | |||||
/// <summary> | |||||
/// 燃料消耗率 | |||||
/// 有效值范围:0-60000(表示 0kg/100km - 600kg/100km) | |||||
/// 最小计量单元:0.01kg/100km | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double FuelConsumptionRate { get; set; } | |||||
/// <summary> | |||||
/// 燃料电池温度探针总数 | |||||
/// N个燃料电池温度探针 | |||||
/// 有效值范围:0-65531 | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public int TemperatureProbeCount { get; set; } | |||||
/// <summary> | |||||
/// 探针温度值 | |||||
/// 有效值范围:0-240(数值偏移量40 ℃,表示-40 ℃ - +200 ℃) | |||||
/// 最小计量单元:1 ℃ | |||||
/// </summary> | |||||
public List<int> TemperatureList { get; set; } = new List<int>(); | |||||
/// <summary> | |||||
/// 氢系统中最高温度 | |||||
/// 有效值范围:0-2400(偏移量40 ℃,表示-40 ℃ - 200 ℃) | |||||
/// 最小计量单元:0.1 ℃ | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double HydrogenSystemMaxTemp { get; set; } | |||||
/// <summary> | |||||
/// 氢系统中最高温度探针代号 | |||||
/// 有效值范围:1-252 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte HydrogenSystemMaxTempNo { get; set; } | |||||
/// <summary> | |||||
/// 氢气最高浓度 | |||||
/// 有效值范围:0-60000(表示0 mg/kg - 50000 mg/kg) | |||||
/// 最小计量单元:1 mg/kg | |||||
/// 异常:0xFF,0XFE | |||||
/// 无效:0xFF,0xFF | |||||
/// </summary> | |||||
public double HydrogenSystemMaxConcentrations { get; set; } | |||||
/// <summary> | |||||
/// 氢气最高浓度传感器代号 | |||||
/// 有效值范围:1-252 | |||||
/// 异常:0XFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte HydrogenSystemMaxConcentrationsNo { get; set; } | |||||
/// <summary> | |||||
/// 氢气最高压力 | |||||
/// 有效值范围:0-1000(表示0MPa - 100MPa),最小计量单位:0.1MPa | |||||
/// </summary> | |||||
public double HydrogenSystemMaxPressure { get; set; } | |||||
/// <summary> | |||||
/// 氢气最高压力传感器代号 | |||||
/// 有效值访问:1-252 | |||||
/// 异常:0xFE | |||||
/// 无效:0xFF | |||||
/// </summary> | |||||
public byte HydrogenSystemMaxPressureNo { get; set; } | |||||
/// <summary> | |||||
/// 高压DC/DC状态 | |||||
/// 0x01:工作 | |||||
/// 0x02:断开 | |||||
/// 0xFE:表示异常 | |||||
/// 0xFF:表示无效 | |||||
/// </summary> | |||||
public byte DCStatus { get; set; } | |||||
} | |||||
} |
@@ -1,26 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 上报信息 | |||||
/// </summary> | |||||
public class NEUploadProperty : INEProperties | |||||
{ | |||||
public string VIN { get ; set; } | |||||
public NEUploadProperty(params NEUploadPropertyBase[] NEUploadPropertyBase) | |||||
{ | |||||
if (NEUploadPropertyBase != null) | |||||
{ | |||||
NEUploadPropertys = NEUploadPropertyBase.ToList(); | |||||
} | |||||
} | |||||
public List<NEUploadPropertyBase> NEUploadPropertys { get; set; } | |||||
} | |||||
} |
@@ -1,12 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
public abstract class NEUploadPropertyBase | |||||
{ | |||||
public abstract NEInfoType NEInfoType { get; } | |||||
} | |||||
} |
@@ -1,33 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 车辆位置数据 | |||||
/// </summary> | |||||
public class NEUploadVehiclePositionProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.车辆位置数据; | |||||
/// <summary> | |||||
/// 定位状态 | |||||
/// 0位:0:有效定位;1:无效定位(当数据通信正常,而不能获取定位信息时,发送最后一次有效定位信息,并将定位状态置为无效。) | |||||
/// 1位:0:北纬;1:南纬 | |||||
/// 2位:0:东经;1:西经 | |||||
/// 3-7位:保留 | |||||
/// </summary> | |||||
public byte PositioStatus { get; set; } | |||||
/// <summary> | |||||
/// 经度 | |||||
/// 以度位单位的经度值乘以10^6,精确到百万分之一度 | |||||
/// </summary> | |||||
public double Lng { get; set; } | |||||
/// <summary> | |||||
/// 纬度 | |||||
/// 以度位单位的纬度值乘以10^6,精确到百万分之一度 | |||||
/// </summary> | |||||
public double Lat { get; set; } | |||||
} | |||||
} |
@@ -1,72 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Enums; | |||||
namespace GBNewEnergy.Protocol.NEProperties.NEUploadProperties | |||||
{ | |||||
/// <summary> | |||||
/// 整车数据 | |||||
/// </summary> | |||||
public class NEUploadVehicleProperty : NEUploadPropertyBase | |||||
{ | |||||
public override NEInfoType NEInfoType => NEInfoType.整车数据; | |||||
/// <summary> | |||||
/// 车辆状态 | |||||
/// </summary> | |||||
public byte CarStatus { get; set; } | |||||
/// <summary> | |||||
/// 充放电状态 | |||||
/// </summary> | |||||
public byte ChargeStatus { get; set; } | |||||
/// <summary> | |||||
/// 运行模式 | |||||
/// </summary> | |||||
public byte OperationMode { get; set; } | |||||
/// <summary> | |||||
/// 车速 | |||||
/// </summary> | |||||
public double Speed { get; set; } | |||||
/// <summary> | |||||
/// 当前里程 | |||||
/// </summary> | |||||
public double Dis { get; set; } | |||||
/// <summary> | |||||
/// 总里程 | |||||
/// </summary> | |||||
public double TotalDis { get; set; } | |||||
/// <summary> | |||||
/// 总电压 | |||||
/// </summary> | |||||
public double TotalVoltage { get; set; } | |||||
/// <summary> | |||||
/// 总电流 | |||||
/// </summary> | |||||
public double TotalTemp { get; set; } | |||||
/// <summary> | |||||
/// SOC | |||||
/// </summary> | |||||
public byte soc { get; set; } | |||||
/// <summary> | |||||
/// DC-DC 状态 | |||||
/// </summary> | |||||
public byte DCStatus { get; set; } | |||||
/// <summary> | |||||
/// 档位 | |||||
/// </summary> | |||||
public byte Stall { get; set; } | |||||
/// <summary> | |||||
/// 加速踏板行程值 | |||||
/// </summary> | |||||
public byte Accelerator { get; set; } | |||||
/// <summary> | |||||
/// 制动踏板状态 | |||||
/// </summary> | |||||
public byte Brakes { get; set; } | |||||
/// <summary> | |||||
/// 绝缘电阻 | |||||
/// </summary> | |||||
public int Resistance { get; set; } | |||||
} | |||||
} |
@@ -1,14 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Enums; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol | |||||
{ | |||||
public abstract class NEUpStreamBase | |||||
{ | |||||
public DateTime Utc{ get; set; } | |||||
public byte[] Buffer { get;protected set; } | |||||
public abstract void ToBuffer(); | |||||
} | |||||
} |
@@ -1,37 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.UpStream | |||||
{ | |||||
/// <summary> | |||||
/// 通用应答 | |||||
/// </summary> | |||||
public class CommonUpStream : NEBodies | |||||
{ | |||||
public CommonUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
public CommonUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6); | |||||
} | |||||
protected override void ToBuffer() | |||||
{ | |||||
Buffer = new byte[6]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
} | |||||
} | |||||
} |
@@ -1,106 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.IO; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.UpStream | |||||
{ | |||||
/// <summary> | |||||
/// 车辆登入 | |||||
/// </summary> | |||||
public class NELoginUpStream : NEBodies | |||||
{ | |||||
public NELoginUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
public NELoginUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// SIM 卡号 | |||||
/// </summary> | |||||
public string SIM { get; set; } | |||||
/// <summary> | |||||
/// 电池总成数 | |||||
/// 可充电储能子系统数 | |||||
/// </summary> | |||||
public byte BatteryCount { get; set; } | |||||
/// <summary> | |||||
/// 电池编码长度 | |||||
/// 可充电储能系统编码长度 | |||||
/// </summary> | |||||
public byte BatteryLength { get; set; } | |||||
/// <summary> | |||||
/// 电池编码 | |||||
/// 可充电储能系统编码 | |||||
/// </summary> | |||||
public IEnumerable<string> BatteryNos { get; set; } | |||||
protected override void ToBuffer() | |||||
{ | |||||
// 根据协议说明书 | |||||
Buffer = new byte[6 + 2 + 20 + 1 + 1 + (BatteryCount * BatteryLength)]; | |||||
Buffer.WriteLittle(CurrentDateTime, 0, 6); | |||||
Buffer.WriteLittle(LoginNum, 6, 2); | |||||
Buffer.WriteLittle(SIM, 8); | |||||
Buffer[28] = BatteryCount; | |||||
Buffer[29] = BatteryLength; | |||||
if ((BatteryCount * BatteryLength) != 0) | |||||
{ | |||||
string str = string.Join("", BatteryNos); | |||||
Buffer.WriteLittle(str, 30); | |||||
} | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
NELoginProperty nELoginProperty = (NELoginProperty)nEProperties; | |||||
if (LoginNumDict.ContainsKey(nELoginProperty.VIN)) | |||||
{ | |||||
LoginInfo temp; | |||||
if (LoginNumDict.TryGetValue(nELoginProperty.VIN, out temp)) | |||||
{ | |||||
// 不等于当天 | |||||
if (temp.ExpirationTime != DateTime.Now.Date) | |||||
{ | |||||
LoginNum = 1; | |||||
LoginNumDict.TryUpdate(nELoginProperty.VIN, new LoginInfo { LoginNum = LoginNum, ExpirationTime=DateTime.Now.Date }, temp); | |||||
} | |||||
else | |||||
{// 自增1 更新字典 | |||||
LoginNum = temp.LoginNum++; | |||||
LoginNumDict.TryUpdate(nELoginProperty.VIN, new LoginInfo { LoginNum = LoginNum, ExpirationTime = DateTime.Now.Date }, temp); | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
LoginNum = 1; | |||||
LoginNumDict.TryAdd(nELoginProperty.VIN, new LoginInfo { LoginNum = LoginNum, ExpirationTime = DateTime.Now.Date }); | |||||
} | |||||
SIM = nELoginProperty.SIM; | |||||
BatteryCount = nELoginProperty.BatteryCount; | |||||
BatteryLength = nELoginProperty.BatteryLength; | |||||
BatteryNos = nELoginProperty.BatteryNos; | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
CurrentDateTime = Buffer.ReadDateTimeLittle(0, 6); | |||||
LoginNum = Buffer.ReadUShortH2LLittle(6, 2); | |||||
SIM = Buffer.ReadStringLittle(8, 20); | |||||
BatteryCount = Buffer[28]; | |||||
BatteryLength = Buffer[29]; | |||||
List<string> batteryNos = new List<string>(); | |||||
for (int i = 0; i < BatteryCount; i++) | |||||
{ | |||||
batteryNos.Add(Buffer.ReadStringLittle(i * BatteryLength + 30, BatteryLength)); | |||||
} | |||||
BatteryNos = batteryNos; | |||||
} | |||||
} | |||||
} |
@@ -1,50 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Exceptions; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.NEProperties; | |||||
namespace GBNewEnergy.Protocol.UpStream | |||||
{ | |||||
/// <summary> | |||||
/// 车辆登出 | |||||
/// </summary> | |||||
public class NELogoutUpStream : NEBodies | |||||
{ | |||||
public NELogoutUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
public NELogoutUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
NELogoutProperty nELogoutProperty = (NELogoutProperty)nEProperties; | |||||
LoginInfo temp; | |||||
if (LoginNumDict.TryGetValue(nELogoutProperty.VIN, out temp)) | |||||
{ | |||||
LoginNum = temp.LoginNum; | |||||
} | |||||
else | |||||
{ | |||||
throw new NEException(Enums.NEErrorCode.LoginSerialNoError, "Must Dependency NELoginUpStream 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); | |||||
} | |||||
} | |||||
} |
@@ -1,88 +0,0 @@ | |||||
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(8, 12); | |||||
Password = Buffer.ReadStringLittle(20, 20); | |||||
EncryptMethod= (NEEncryptMethod)Buffer[40]; | |||||
} | |||||
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, 40); | |||||
} | |||||
} | |||||
} |
@@ -1,47 +0,0 @@ | |||||
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); | |||||
} | |||||
} | |||||
} |
@@ -1,38 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEProperties.NEUploadProperties; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.UpStream | |||||
{ | |||||
/// <summary> | |||||
/// 实时信息上报 | |||||
/// </summary> | |||||
public class NERealUploadUpStream : NEBodies | |||||
{ | |||||
public NERealUploadUpStream(byte[] buffer, NEGlobalConfigs nEConfigs) : base(buffer, nEConfigs) | |||||
{ | |||||
} | |||||
public NERealUploadUpStream(INEProperties nEProperties, NEGlobalConfigs nEConfigs) : base(nEProperties, nEConfigs) | |||||
{ | |||||
} | |||||
public NEUploadProperty NEUploadProperty { get;private set; } | |||||
protected override void InitializeProperties(INEProperties nEProperties) | |||||
{ | |||||
NEUploadProperty = (NEUploadProperty)nEProperties; | |||||
} | |||||
protected override void InitializePropertiesFromBuffer() | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
protected override void ToBuffer() | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
} | |||||
} |
@@ -1,56 +0,0 @@ | |||||
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio 15 | |||||
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GBNewEnergy.Protocol.Test", "GBNewEnergy.Protocol.Test\GBNewEnergy.Protocol.Test.csproj", "{AAA669F5-E689-40CA-97EF-B5BA672B11DD}" | |||||
EndProject | |||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NEEncrypts.Tests", "NEEncrypts.Tests", "{1D162FFB-5944-470C-B6F0-8F7387C706DF}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NEEncryptsNET4.Test", "NEEncrypts.Tests\NEEncryptsNET4.Test\NEEncryptsNET4.Test.csproj", "{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NEEncryptsNET45.Test", "NEEncrypts.Tests\NEEncryptsNET45.Test\NEEncryptsNET45.Test.csproj", "{1ED77002-D542-4013-B71A-C52CE92D5747}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NEEncryptsNETCore.Test", "NEEncrypts.Tests\NEEncryptsNETCore.Test\NEEncryptsNETCore.Test.csproj", "{361FD688-A06B-4D68-9B76-93C6559278E8}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Any CPU = Debug|Any CPU | |||||
Release|Any CPU = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{1934F3A6-1396-46C2-BFD6-1E2DC1A26E3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{1934F3A6-1396-46C2-BFD6-1E2DC1A26E3A}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{1934F3A6-1396-46C2-BFD6-1E2DC1A26E3A}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{1934F3A6-1396-46C2-BFD6-1E2DC1A26E3A}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{AAA669F5-E689-40CA-97EF-B5BA672B11DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{AAA669F5-E689-40CA-97EF-B5BA672B11DD}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{AAA669F5-E689-40CA-97EF-B5BA672B11DD}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{AAA669F5-E689-40CA-97EF-B5BA672B11DD}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{1ED77002-D542-4013-B71A-C52CE92D5747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{1ED77002-D542-4013-B71A-C52CE92D5747}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{1ED77002-D542-4013-B71A-C52CE92D5747}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{1ED77002-D542-4013-B71A-C52CE92D5747}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{361FD688-A06B-4D68-9B76-93C6559278E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{361FD688-A06B-4D68-9B76-93C6559278E8}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{361FD688-A06B-4D68-9B76-93C6559278E8}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{361FD688-A06B-4D68-9B76-93C6559278E8}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | |||||
HideSolutionNode = FALSE | |||||
EndGlobalSection | |||||
GlobalSection(NestedProjects) = preSolution | |||||
{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92} = {1D162FFB-5944-470C-B6F0-8F7387C706DF} | |||||
{1ED77002-D542-4013-B71A-C52CE92D5747} = {1D162FFB-5944-470C-B6F0-8F7387C706DF} | |||||
{361FD688-A06B-4D68-9B76-93C6559278E8} = {1D162FFB-5944-470C-B6F0-8F7387C706DF} | |||||
EndGlobalSection | |||||
GlobalSection(ExtensibilityGlobals) = postSolution | |||||
SolutionGuid = {E7AF20B3-4327-4DF7-B503-9FE08AA92A75} | |||||
EndGlobalSection | |||||
EndGlobal |
@@ -1,53 +0,0 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |||||
<PropertyGroup> | |||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
<ProjectGuid>{7C7C1511-EB17-4DBF-B04F-EFE8FF4ECE92}</ProjectGuid> | |||||
<OutputType>Exe</OutputType> | |||||
<RootNamespace>NEEncryptsNET4.Test</RootNamespace> | |||||
<AssemblyName>NEEncryptsNET4.Test</AssemblyName> | |||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||||
<PlatformTarget>AnyCPU</PlatformTarget> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
<DebugType>full</DebugType> | |||||
<Optimize>false</Optimize> | |||||
<OutputPath>bin\Debug\</OutputPath> | |||||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||||
<PlatformTarget>AnyCPU</PlatformTarget> | |||||
<DebugType>pdbonly</DebugType> | |||||
<Optimize>true</Optimize> | |||||
<OutputPath>bin\Release\</OutputPath> | |||||
<DefineConstants>TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Reference Include="System" /> | |||||
<Reference Include="System.Core" /> | |||||
<Reference Include="System.Xml.Linq" /> | |||||
<Reference Include="System.Data.DataSetExtensions" /> | |||||
<Reference Include="Microsoft.CSharp" /> | |||||
<Reference Include="System.Data" /> | |||||
<Reference Include="System.Xml" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Compile Include="Program.cs" /> | |||||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj"> | |||||
<Project>{1934f3a6-1396-46c2-bfd6-1e2dc1a26e3a}</Project> | |||||
<Name>GBNewEnergy.Protocol</Name> | |||||
</ProjectReference> | |||||
</ItemGroup> | |||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
</Project> |
@@ -1,46 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEEncrypts; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.IO; | |||||
using System.Linq; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
namespace NEEncryptsNET4.Test | |||||
{ | |||||
class Program | |||||
{ | |||||
static void Main(string[] args) | |||||
{ | |||||
Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaasssddd123"; | |||||
var bytes = Encoding.UTF8.GetBytes(str); | |||||
var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
Console.WriteLine("原数据:" + str); | |||||
Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | |||||
Default_NERSAEncryptImpl_NET rsa = new Default_NERSAEncryptImpl_NET(Encoding.UTF8, | |||||
"SHA256", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | |||||
} | |||||
} | |||||
} |
@@ -1,36 +0,0 @@ | |||||
using System.Reflection; | |||||
using System.Runtime.CompilerServices; | |||||
using System.Runtime.InteropServices; | |||||
// 有关程序集的一般信息由以下 | |||||
// 控制。更改这些特性值可修改 | |||||
// 与程序集关联的信息。 | |||||
[assembly: AssemblyTitle("NEEncryptsNET4.Test")] | |||||
[assembly: AssemblyDescription("")] | |||||
[assembly: AssemblyConfiguration("")] | |||||
[assembly: AssemblyCompany("")] | |||||
[assembly: AssemblyProduct("NEEncryptsNET4.Test")] | |||||
[assembly: AssemblyCopyright("Copyright © 2018")] | |||||
[assembly: AssemblyTrademark("")] | |||||
[assembly: AssemblyCulture("")] | |||||
// 将 ComVisible 设置为 false 会使此程序集中的类型 | |||||
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 | |||||
//请将此类型的 ComVisible 特性设置为 true。 | |||||
[assembly: ComVisible(false)] | |||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID | |||||
[assembly: Guid("7c7c1511-eb17-4dbf-b04f-efe8ff4ece92")] | |||||
// 程序集的版本信息由下列四个值组成: | |||||
// | |||||
// 主版本 | |||||
// 次版本 | |||||
// 生成号 | |||||
// 修订号 | |||||
// | |||||
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 | |||||
// 方法是按如下所示使用“*”: : | |||||
// [assembly: AssemblyVersion("1.0.*")] | |||||
[assembly: AssemblyVersion("1.0.0.0")] | |||||
[assembly: AssemblyFileVersion("1.0.0.0")] |
@@ -1,6 +0,0 @@ | |||||
<?xml version="1.0" encoding="utf-8" ?> | |||||
<configuration> | |||||
<startup> | |||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> | |||||
</startup> | |||||
</configuration> |
@@ -1,57 +0,0 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |||||
<PropertyGroup> | |||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
<ProjectGuid>{1ED77002-D542-4013-B71A-C52CE92D5747}</ProjectGuid> | |||||
<OutputType>Exe</OutputType> | |||||
<RootNamespace>NEEncryptsNET45.Test</RootNamespace> | |||||
<AssemblyName>NEEncryptsNET45.Test</AssemblyName> | |||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||||
<PlatformTarget>AnyCPU</PlatformTarget> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
<DebugType>full</DebugType> | |||||
<Optimize>false</Optimize> | |||||
<OutputPath>bin\Debug\</OutputPath> | |||||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||||
<PlatformTarget>AnyCPU</PlatformTarget> | |||||
<DebugType>pdbonly</DebugType> | |||||
<Optimize>true</Optimize> | |||||
<OutputPath>bin\Release\</OutputPath> | |||||
<DefineConstants>TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Reference Include="System" /> | |||||
<Reference Include="System.Core" /> | |||||
<Reference Include="System.Xml.Linq" /> | |||||
<Reference Include="System.Data.DataSetExtensions" /> | |||||
<Reference Include="Microsoft.CSharp" /> | |||||
<Reference Include="System.Data" /> | |||||
<Reference Include="System.Net.Http" /> | |||||
<Reference Include="System.Xml" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Compile Include="Program.cs" /> | |||||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<None Include="App.config" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj"> | |||||
<Project>{1934f3a6-1396-46c2-bfd6-1e2dc1a26e3a}</Project> | |||||
<Name>GBNewEnergy.Protocol</Name> | |||||
</ProjectReference> | |||||
</ItemGroup> | |||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
</Project> |
@@ -1,45 +0,0 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using GBNewEnergy.Protocol.NEEncrypts; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace NEEncryptsNET45.Test | |||||
{ | |||||
class Program | |||||
{ | |||||
static void Main(string[] args) | |||||
{ | |||||
Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaasssddd123"; | |||||
var bytes = Encoding.UTF8.GetBytes(str); | |||||
var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
Console.WriteLine("原数据:" + str); | |||||
Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | |||||
Default_NERSAEncryptImpl_NET rsa = new Default_NERSAEncryptImpl_NET(Encoding.UTF8, | |||||
"SHA256", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | |||||
} | |||||
} | |||||
} |
@@ -1,36 +0,0 @@ | |||||
using System.Reflection; | |||||
using System.Runtime.CompilerServices; | |||||
using System.Runtime.InteropServices; | |||||
// 有关程序集的一般信息由以下 | |||||
// 控制。更改这些特性值可修改 | |||||
// 与程序集关联的信息。 | |||||
[assembly: AssemblyTitle("NEEncryptsNET45.Test")] | |||||
[assembly: AssemblyDescription("")] | |||||
[assembly: AssemblyConfiguration("")] | |||||
[assembly: AssemblyCompany("")] | |||||
[assembly: AssemblyProduct("NEEncryptsNET45.Test")] | |||||
[assembly: AssemblyCopyright("Copyright © 2018")] | |||||
[assembly: AssemblyTrademark("")] | |||||
[assembly: AssemblyCulture("")] | |||||
// 将 ComVisible 设置为 false 会使此程序集中的类型 | |||||
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 | |||||
//请将此类型的 ComVisible 特性设置为 true。 | |||||
[assembly: ComVisible(false)] | |||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID | |||||
[assembly: Guid("1ed77002-d542-4013-b71a-c52ce92d5747")] | |||||
// 程序集的版本信息由下列四个值组成: | |||||
// | |||||
// 主版本 | |||||
// 次版本 | |||||
// 生成号 | |||||
// 修订号 | |||||
// | |||||
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 | |||||
// 方法是按如下所示使用“*”: : | |||||
// [assembly: AssemblyVersion("1.0.*")] | |||||
[assembly: AssemblyVersion("1.0.0.0")] | |||||
[assembly: AssemblyFileVersion("1.0.0.0")] |
@@ -1,12 +0,0 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<OutputType>Exe</OutputType> | |||||
<TargetFramework>netcoreapp2.1</TargetFramework> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\GBNewEnergy.Protocol\GBNewEnergy.Protocol.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |
@@ -1,52 +0,0 @@ | |||||
using GBNewEnergy.Protocol.NEEncrypts; | |||||
using GBNewEnergy.Protocol.Extensions; | |||||
using System; | |||||
using System.Text; | |||||
using System.Security.Cryptography; | |||||
namespace NEEncryptsNETCore.Test | |||||
{ | |||||
class Program | |||||
{ | |||||
static void Main(string[] args) | |||||
{ | |||||
//Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaaaaa111111"; | |||||
//var bytes = Encoding.UTF8.GetBytes(str); | |||||
//var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
//Console.WriteLine("原数据:" + str); | |||||
//Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
//Console.WriteLine("解密后:" + Encoding.ASCII.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | |||||
//NERSAEncryptImpl rsa = new NERSAEncryptImpl( | |||||
// new GBNewEnergy.Protocol.NEGlobalConfigs() | |||||
// { | |||||
// NEEncryptRSAPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoQh0wEqx/R2H1v00IU12Oc30fosRC/frhH89L6G+fzeaqI19MYQhEPMU13wpeqRONCUta+2iC1sgCNQ9qGGf19yGdZUfueaB1Nu9rdueQKXgVurGHJ+5N71UFm+OP1XcnFUCK4wT5d7ZIifXxuqLehP9Ts6sNjhVfa+yU+VjF5HoIe69OJEPo7OxRZcRTe17khc93Ic+PfyqswQJJlY/bgpcLJQnM+QuHmxNtF7/FpAx9YEQsShsGpVo7JaKgLo+s6AFoJ4QldQKir2vbN9vcKRbG3piElPilWDpjXQkOJZhUloh/jd7QrKFimZFldJ1r6Q59QYUyGKZARUe0KZpMQIDAQAB", | |||||
// NEEncryptRSAPrivateKey = "MIIEpAIBAAKCAQEAoQh0wEqx/R2H1v00IU12Oc30fosRC/frhH89L6G+fzeaqI19MYQhEPMU13wpeqRONCUta+2iC1sgCNQ9qGGf19yGdZUfueaB1Nu9rdueQKXgVurGHJ+5N71UFm+OP1XcnFUCK4wT5d7ZIifXxuqLehP9Ts6sNjhVfa+yU+VjF5HoIe69OJEPo7OxRZcRTe17khc93Ic+PfyqswQJJlY/bgpcLJQnM+QuHmxNtF7/FpAx9YEQsShsGpVo7JaKgLo+s6AFoJ4QldQKir2vbN9vcKRbG3piElPilWDpjXQkOJZhUloh/jd7QrKFimZFldJ1r6Q59QYUyGKZARUe0KZpMQIDAQABAoIBAQCRZLUlOUvjIVqYvhznRK1OG6p45s8JY1r+UnPIId2Bt46oSLeUkZvZVeCnfq9k0Bzb8AVGwVPhtPEDh73z3dEYcT/lwjLXAkyPB6gG5ZfI/vvC/k7JYV01+neFmktw2/FIJWjEMMF2dvLNZ/Pm4bX1Dz9SfD/45Hwr8wqrvRzvFZsj5qqOxv9RPAudOYwCwZskKp/GF+L+3Ycod1Wu98imzMZUH+L5dQuDGg3kvf3ljIAegTPoqYBg0imNPYY/EGoFKnbxlK5S5/5uAFb16dGJqAz3XQCz9Is/IWrOTu0etteqV2Ncs8uqPdjed+b0j8CMsr4U1xjwPQ8WwdaJtTkRAoGBANAndgiGZkCVcc9975/AYdgFp35W6D+hGQAZlL6DmnucUFdXbWa/x2rTSEXlkvgk9X/PxOptUYsLJkzysTgfDywZwuIXLm9B3oNmv3bVgPXsgDsvDfaHYCgz0nHK6NSrX2AeX3yO/dFuoZsuk+J+UyRigMqYj0wjmxUlqj183hinAoGBAMYMOBgF77OXRII7GAuEut/nBeh2sBrgyzR7FmJMs5kvRh6Ck8wp3ysgMvX4lxh1ep8iCw1R2cguqNATr1klOdsCTOE9RrhuvOp3JrYzuIAK6MpH/uBICy4w1rW2+gQySsHcH40r+tNaTFQ7dQ1tef//iy/IW8v8i0t+csztE1JnAoGABdtWYt8FOYP688+jUmdjWWSvVcq0NjYeMfaGTOX/DsNTL2HyXhW/Uq4nNnBDNmAz2CjMbZwt0y+5ICkj+2REVQVUinAEinTcAe5+LKXNPx4sbX3hcrJUbk0m+rSu4G0B/f5cyXBsi9wFCAzDdHgBduCepxSr04Sc9Hde1uQQi7kCgYB0U20HP0Vh+TG2RLuE2HtjVDD2L/CUeQEiXEHzjxXWnhvTg+MIAnggvpLwQwmMxkQ2ACr5sd/3YuCpB0bxV5o594nsqq9FWVYBaecFEjAGlWHSnqMoXWijwu/6X/VOTbP3VjH6G6ECT4GR4DKKpokIQrMgZ9DzaezvdOA9WesFdQKBgQCWfeOQTitRJ0NZACFUn3Fs3Rvgc9eN9YSWj4RtqkmGPMPvguWo+SKhlk3IbYjrRBc5WVOdoX8JXb2/+nAGhPCuUZckWVmZe5pMSr4EkNQdYeY8kOXGSjoTOUH34ZdKeS+e399BkBWIiXUejX/Srln0H4KoHnTWgxwNpTsBCgXu8Q==", | |||||
// NERSAType = GBNewEnergy.Protocol.NEGlobalConfigs.RSAType.RSA2 | |||||
// }); | |||||
Default_NERSAEncryptImpl rsa = new Default_NERSAEncryptImpl( | |||||
Encoding.UTF8, | |||||
HashAlgorithmName.SHA256, | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | |||||
} | |||||
} | |||||
} |