|
@@ -1,40 +1,30 @@
|
|
|
-using NLog;
|
|
|
+using EVCB_OCPP.Domain;
|
|
|
+using EVCB_OCPP.Domain.Models.Database;
|
|
|
+using EVCB_OCPP.Packet.Features;
|
|
|
+using EVCB_OCPP.Packet.Messages;
|
|
|
+using EVCB_OCPP.Packet.Messages.Basic;
|
|
|
+using EVCB_OCPP.Packet.Messages.Core;
|
|
|
+using EVCB_OCPP.Packet.Messages.RemoteTrigger;
|
|
|
+using EVCB_OCPP.WSServer.Helper;
|
|
|
+using EVCB_OCPP.WSServer.Message;
|
|
|
+using EVCB_OCPP.WSServer.Service;
|
|
|
+using Newtonsoft.Json;
|
|
|
+using NLog;
|
|
|
using OCPPServer.Protocol;
|
|
|
using OCPPServer.SubProtocol;
|
|
|
using SuperSocket.SocketBase;
|
|
|
using SuperSocket.SocketBase.Config;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
-using System.IO;
|
|
|
-using System.Linq;
|
|
|
-using System.Text;
|
|
|
-using System.Xml.Linq;
|
|
|
-using EVCB_OCPP.Packet.Messages.Basic;
|
|
|
-using EVCB_OCPP.Packet.Messages.Core;
|
|
|
-using EVCB_OCPP.WSServer.Message;
|
|
|
-using EVCB_OCPP.Packet.Messages;
|
|
|
-using EVCB_OCPP.Domain;
|
|
|
-using EVCB_OCPP.Domain.Models.Database;
|
|
|
-using System.Threading;
|
|
|
+using System.Configuration;
|
|
|
using System.Data.Entity;
|
|
|
-using EVCB_OCPP.Packet.Features;
|
|
|
-using EVCB_OCPP.Packet.Features.Core;
|
|
|
-using Newtonsoft.Json;
|
|
|
-using OCPPPackage.Profiles;
|
|
|
-using System.Threading.Tasks;
|
|
|
-using EVCB_OCPP.WSServer.Helper;
|
|
|
using System.Data.SqlClient;
|
|
|
-using EVCB_OCPP.Packet.Messages.FirmwareManagement;
|
|
|
-using EVCB_OCPP.Packet.Messages.RemoteTrigger;
|
|
|
-using System.Configuration;
|
|
|
-using System.Net;
|
|
|
-using System.Net.Security;
|
|
|
-using System.Security.Cryptography.X509Certificates;
|
|
|
-using EVCB_OCPP.WSServer.Service;
|
|
|
-using EVCB_OCPP.Packet.Messages.SmartCharging;
|
|
|
-using System.Security.Authentication;
|
|
|
-using NLog.Fluent;
|
|
|
using System.Diagnostics;
|
|
|
+using System.Linq;
|
|
|
+using System.Security.Authentication;
|
|
|
+using System.Threading;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Xml.Linq;
|
|
|
|
|
|
|
|
|
namespace EVCB_OCPP.WSServer
|
|
@@ -57,7 +47,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
{
|
|
|
static private ILogger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
-
|
|
|
+ private DateTime lastcheckdt = DateTime.Now.AddSeconds(-20);
|
|
|
private Dictionary<string, ClientData> clientDic = new Dictionary<string, ClientData>();
|
|
|
private readonly Object _lockClientDic = new object();
|
|
|
private readonly Object _lockConfirmPacketList = new object();
|
|
@@ -531,9 +521,9 @@ namespace EVCB_OCPP.WSServer
|
|
|
Send(session, response, string.Format("{0} {1}", analysisResult.Action, "Response"), result.Exception == null ? string.Empty : result.Exception.ToString());
|
|
|
|
|
|
|
|
|
- string changeServerRequest = BasicMessageHandler.GenerateRequestofOCPP20(Guid.NewGuid().ToString(), "SetNetworkProfile", new EVCB_OCPP20.Packet.Messages.SetNetworkProfileRequest()
|
|
|
+ var request = new EVCB_OCPP20.Packet.Messages.SetNetworkProfileRequest()
|
|
|
{
|
|
|
- ConfigurationSlot = 0,
|
|
|
+ ConfigurationSlot = 1,
|
|
|
ConnectionData = new EVCB_OCPP20.Packet.DataTypes.NetworkConnectionProfileType()
|
|
|
{
|
|
|
OcppVersion = EVCB_OCPP20.Packet.DataTypes.EnumTypes.OCPPVersionEnumType.OCPP20,
|
|
@@ -543,10 +533,11 @@ namespace EVCB_OCPP.WSServer
|
|
|
OcppInterface = EVCB_OCPP20.Packet.DataTypes.EnumTypes.OCPPInterfaceEnumType.Wired0
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
- );
|
|
|
+ };
|
|
|
+ var uuid = session.queue20.store(request);
|
|
|
+ string requestText = BasicMessageHandler.GenerateRequestofOCPP20(uuid, "SetNetworkProfile", request);
|
|
|
+ Send(session, requestText, "SetNetworkProfile");
|
|
|
|
|
|
- Send(session, changeServerRequest, "SetNetworkProfile");
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
@@ -594,7 +585,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
|
|
|
},
|
|
|
AttributeType= EVCB_OCPP20.Packet.DataTypes.EnumTypes.AttributeEnumType.Actual,
|
|
|
- AttributeValue= _ocpp20NetworkSetting,
|
|
|
+ AttributeValue= JsonConvert.SerializeObject(new List<int>(){ 1 }),
|
|
|
Variable=new EVCB_OCPP20.Packet.DataTypes.VariableType()
|
|
|
{
|
|
|
Name="NetworkConfigurationPriority",
|
|
@@ -607,7 +598,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
|
|
|
};
|
|
|
var uuid = session.queue20.store(request);
|
|
|
- string requestText = BasicMessageHandler.GenerateRequestofOCPP20(uuid, "SetVariables", request);
|
|
|
+ string requestText = BasicMessageHandler.GenerateRequestofOCPP20(uuid, "SetVariables", request);
|
|
|
Send(session, requestText, "SetVariables");
|
|
|
}
|
|
|
|
|
@@ -617,7 +608,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
{
|
|
|
EVCB_OCPP20.Packet.Messages.SetVariablesResponse response = (EVCB_OCPP20.Packet.Messages.IConfirmation)analysisResult.Message as EVCB_OCPP20.Packet.Messages.SetVariablesResponse;
|
|
|
|
|
|
- if (response.SetVariableResult[0].AttributeStatus == EVCB_OCPP20.Packet.DataTypes.EnumTypes.SetVariableStatusEnumType.RebootRequired )
|
|
|
+ if (response.SetVariableResult[0].AttributeStatus == EVCB_OCPP20.Packet.DataTypes.EnumTypes.SetVariableStatusEnumType.RebootRequired)
|
|
|
{
|
|
|
var request = new EVCB_OCPP20.Packet.Messages.ResetRequest()
|
|
|
{
|
|
@@ -627,7 +618,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
var uuid = session.queue20.store(request);
|
|
|
string requestText = BasicMessageHandler.GenerateRequestofOCPP20(uuid, "Reset", request);
|
|
|
Send(session, requestText, "Reset");
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -1245,21 +1236,24 @@ namespace EVCB_OCPP.WSServer
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- DateTime lastcheckdt = new DateTime();
|
|
|
+
|
|
|
async private void HeartBeatCheckTrigger()
|
|
|
{
|
|
|
for (; ; )
|
|
|
{
|
|
|
if (_ct.IsCancellationRequested)
|
|
|
{
|
|
|
+ Console.WriteLine("----------********************************************************");
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
try
|
|
|
{
|
|
|
|
|
|
- if (DateTime.Now.Subtract(lastcheckdt).TotalSeconds > 10)
|
|
|
+ if (DateTime.Now.Subtract(lastcheckdt).TotalSeconds > 30)
|
|
|
{
|
|
|
+ lastcheckdt = DateTime.Now;
|
|
|
+ Console.WriteLine("===========================");
|
|
|
Stopwatch watch = new Stopwatch();
|
|
|
Dictionary<string, ClientData> _copyClientDic = null;
|
|
|
lock (_lockClientDic)
|
|
@@ -1268,7 +1262,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
}
|
|
|
|
|
|
var cdt = DateTime.Now;
|
|
|
- var clients = _copyClientDic.Where(x => x.Value.LastActiveTime > cdt.AddSeconds(-30)).Select(x => x.Value).ToList();
|
|
|
+ var clients = _copyClientDic.Where(x => x.Value.LastActiveTime > cdt.AddSeconds(-120)).Select(x => x.Value).ToList();
|
|
|
|
|
|
watch.Start();
|
|
|
foreach (var session in clients)
|
|
@@ -1296,13 +1290,14 @@ namespace EVCB_OCPP.WSServer
|
|
|
logger.Fatal("Update HeartBeatCheckTrigger cost " + watch.ElapsedMilliseconds / 1000 + " seconds.");
|
|
|
}
|
|
|
}
|
|
|
- lastcheckdt = DateTime.Now;
|
|
|
+
|
|
|
|
|
|
await Task.Delay(10000);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- logger.Error(string.Format("HealthAlarmTrigger Ex:{0}", ex.ToString()));
|
|
|
+ Console.WriteLine("***********************************************************");
|
|
|
+ logger.Error(string.Format("HeartBeatCheckTrigger Ex:{0}", ex.ToString()));
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -1326,7 +1321,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
_copyClientDic = new Dictionary<string, ClientData>(clientDic);
|
|
|
}
|
|
|
|
|
|
- var removeClients = _copyClientDic.Where(x => x.Value.LastActiveTime < DateTime.Now.AddSeconds(-120)).Select(x => x.Value).ToList();
|
|
|
+ var removeClients = _copyClientDic.Where(x => x.Value.LastActiveTime < DateTime.Now.AddSeconds(-300)).Select(x => x.Value).ToList();
|
|
|
|
|
|
foreach (var session in removeClients)
|
|
|
{
|