|
@@ -1342,7 +1342,22 @@ namespace EVCB_OCPP.WSServer
|
|
|
{
|
|
|
// Console.WriteLine(string.Format("Now:{0} commandList Count:{1} ", DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss"), commandList.Count));
|
|
|
}
|
|
|
+ var resendList = GetResendMessage();
|
|
|
+ foreach (var resendItem in resendList)
|
|
|
+ {
|
|
|
+ ClientData session;
|
|
|
+ if (clientDic.TryGetValue(resendItem.ChargePointSerialNumber, out session))
|
|
|
+ {
|
|
|
+ if (DateTime.UtcNow.Subtract(resendItem.SentOn).TotalSeconds > 1)
|
|
|
+ {
|
|
|
+ resendItem.SentTimes--;
|
|
|
+ resendItem.SentOn = DateTime.UtcNow;
|
|
|
+ Send(session, resendItem.SentMessage, string.Format("{0} {1}", resendItem.SentAction, "Request"), "");
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
foreach (var charger_SN in cmdMachineList)
|
|
|
{
|
|
|
ClientData session;
|
|
@@ -1353,6 +1368,8 @@ namespace EVCB_OCPP.WSServer
|
|
|
|
|
|
if (session.IsCheckIn && !session.ISOCPP20)
|
|
|
{
|
|
|
+ string rawRequest = string.Empty;
|
|
|
+
|
|
|
var cmdList = commandList.Where(c => c.ChargeBoxId == charger_SN).ToList();
|
|
|
|
|
|
foreach (var item in cmdList)
|
|
@@ -1377,7 +1394,7 @@ namespace EVCB_OCPP.WSServer
|
|
|
{
|
|
|
request = JsonConvert.DeserializeObject(item.OutRequest, _RequestType) as IRequest;
|
|
|
uuid = session.queue.store(request);
|
|
|
- string rawRequest = BasicMessageHandler.GenerateRequest(uuid, item.OutAction, request);
|
|
|
+ rawRequest = BasicMessageHandler.GenerateRequest(uuid, item.OutAction, request);
|
|
|
Send(session, rawRequest, string.Format("{0} {1}", action, "Request"), "");
|
|
|
}
|
|
|
|
|
@@ -1389,20 +1406,20 @@ namespace EVCB_OCPP.WSServer
|
|
|
{
|
|
|
request = Activator.CreateInstance(_RequestType) as IRequest;
|
|
|
uuid = session.queue.store(request);
|
|
|
- string rawRequest = BasicMessageHandler.GenerateDestroyRequest(uuid, item.OutAction, item.OutRequest);
|
|
|
+ rawRequest = BasicMessageHandler.GenerateDestroyRequest(uuid, item.OutAction, item.OutRequest);
|
|
|
Send(session, rawRequest, string.Format("{0} {1}", action, "Request"), "");
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
- string rawRequest = BasicMessageHandler.GenerateDestroyRequest(Guid.NewGuid().ToString(), item.OutAction, item.OutRequest);
|
|
|
+ rawRequest = BasicMessageHandler.GenerateDestroyRequest(Guid.NewGuid().ToString(), item.OutAction, item.OutRequest);
|
|
|
Send(session, rawRequest, string.Format("{0} {1}", action, "Request"), "");
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- AddConfirmMessage(charger_SN, item.Id, item.SerialNo, item.OutAction, uuid);
|
|
|
+ AddConfirmMessage(charger_SN, item.Id, item.SerialNo, item.OutAction, uuid, item.CreatedBy, rawRequest);
|
|
|
|
|
|
#region 更新資料表單一欄位
|
|
|
var _UpdatedItem = new ServerMessage() { Id = item.Id, UpdatedOn = DateTime.UtcNow };
|
|
@@ -1414,9 +1431,10 @@ namespace EVCB_OCPP.WSServer
|
|
|
db.Entry(_UpdatedItem).Property(x => x.UpdatedOn).IsModified = true;// 可以直接使用這方式強制某欄位要更新,只是查詢集合耗效能而己
|
|
|
|
|
|
db.SaveChanges();
|
|
|
- await Task.Delay(100);
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
+ await Task.Delay(100);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1905,16 +1923,30 @@ namespace EVCB_OCPP.WSServer
|
|
|
}
|
|
|
|
|
|
|
|
|
- private void AddConfirmMessage(string chargePointSerialNumber, int table_id, string requestId, string action, string msg_id)
|
|
|
+ private List<NeedConfirmMessage> GetResendMessage()
|
|
|
+ {
|
|
|
+ List<NeedConfirmMessage> sendMessages = new List<NeedConfirmMessage>();
|
|
|
+ lock (_lockConfirmPacketList)
|
|
|
+ {
|
|
|
+ sendMessages = needConfirmPacketList.Where(x => x.SentTimes > 1 && x.CreatedBy == "Server").ToList();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return sendMessages;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void AddConfirmMessage(string chargePointSerialNumber, int table_id, string requestId, string action, string msg_id, string createdBy, string sendMessage)
|
|
|
{
|
|
|
NeedConfirmMessage _needConfirmMsg = new NeedConfirmMessage();
|
|
|
_needConfirmMsg.Id = table_id;
|
|
|
_needConfirmMsg.SentAction = action;
|
|
|
_needConfirmMsg.SentOn = DateTime.UtcNow;
|
|
|
- _needConfirmMsg.SentTimes = 1;
|
|
|
+ _needConfirmMsg.SentTimes = 4;
|
|
|
_needConfirmMsg.ChargePointSerialNumber = chargePointSerialNumber;
|
|
|
_needConfirmMsg.RequestId = requestId;
|
|
|
_needConfirmMsg.SentUniqueId = msg_id;
|
|
|
+ _needConfirmMsg.CreatedBy = createdBy;
|
|
|
+ _needConfirmMsg.SentMessage = sendMessage;
|
|
|
|
|
|
if (needConfirmActions.Contains(action))
|
|
|
{
|
|
@@ -1928,15 +1960,14 @@ namespace EVCB_OCPP.WSServer
|
|
|
|
|
|
private void RemoveConfirmMessage()
|
|
|
{
|
|
|
-
|
|
|
- var before_3mins = DateTime.UtcNow.AddMinutes(-3);
|
|
|
+ var before10Mins = DateTime.UtcNow.AddMinutes(-10);
|
|
|
lock (_lockConfirmPacketList)
|
|
|
{
|
|
|
- var removeList = needConfirmPacketList.Where(x => x.SentTimes == 0 || x.SentOn < before_3mins).ToList();
|
|
|
+ var removeList = needConfirmPacketList.Where(x => x.SentTimes == 0 || x.SentOn < before10Mins).ToList();
|
|
|
foreach (var item in removeList)
|
|
|
{
|
|
|
needConfirmPacketList.Remove(item);
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|