Robert 1 жил өмнө
parent
commit
31303c1bef

+ 9 - 16
EVCB_OCPP.WSServer/ProtalServer.cs

@@ -165,19 +165,6 @@ namespace EVCB_OCPP.WSServer
         };
         private CancellationTokenSource _cts = new CancellationTokenSource();
         private CancellationToken _ct;
-
-        private StationConfigService _StationConfigService = null;
-        private StationConfigService StationConfigService
-        {
-            get
-            {
-                if (_StationConfigService is null)
-                {
-                    _StationConfigService = serviceProvider.GetRequiredService<StationConfigService>();
-                }
-                return _StationConfigService;
-            }
-        }
         #endregion
 
         internal Dictionary<string, WsClientData> GetClientDic()
@@ -191,6 +178,8 @@ namespace EVCB_OCPP.WSServer
         internal LoadingBalanceService LoadingBalanceService => _loadingBalanceService;
         internal ProfileHandler ProfileHandler => profileHandler;
 
+        internal readonly List<Func<WsClientData, CancellationToken, Task>> InitActions = new List<Func<WsClientData, CancellationToken, Task>>();
+
         public async Task StartAsync(CancellationToken cancellationToken)
         {
             GlobalConfig.DenyModelNames = await webDbService.GetDenyModelNames(cancellationToken);
@@ -1028,13 +1017,13 @@ namespace EVCB_OCPP.WSServer
         private async Task InitializeEVSE(WsClientData session)
         {
             // Pending mode 下發設定 
-            string connectorType = await mainDbService.GetMachineConnectorType(session.ChargeBoxId);
+            string connectorType = await mainDbService.GetMachineConnectorType(session.ChargeBoxId, session.DisconnetCancellationToken);
             if (!string.IsNullOrEmpty(connectorType) &&
                 (connectorType.Contains("6") || connectorType.Contains("7") || connectorType.Contains("8") || connectorType.Contains("9")))
             {
                 session.IsAC = false;
             }
-            await mainDbService.SetMachineConnectionType(session.ChargeBoxId, session.UriScheme.Contains("wss") ? 2 : 1);
+            await mainDbService.SetMachineConnectionType(session.ChargeBoxId, session.UriScheme.Contains("wss") ? 2 : 1, session.DisconnetCancellationToken);
 
             string requestId = string.Empty;
             MessageResult response = null;
@@ -1062,7 +1051,11 @@ namespace EVCB_OCPP.WSServer
                     session.ChargeBoxId, key: "StopTransactionOnInvalidId", value: "True");
             }
 
-            await StationConfigService?.CheckAndUpdateEvseConfig(session, session.DisconnetCancellationToken);
+            foreach (var initFunction in InitActions)
+            {
+                await initFunction(session, session.DisconnetCancellationToken);
+            }
+            //await StationConfigService?.CheckAndUpdateEvseConfig(session, session.DisconnetCancellationToken);
         }
 
         private void Send(WsClientData session, string msg, string messageType, string errorMsg = "")

+ 3 - 3
EVCB_OCPP.WSServer/Service/ConfirmWaitingMessageSerevice.cs

@@ -198,17 +198,17 @@ namespace EVCB_OCPP.WSServer.Service
             do
             {
                 var requestId = await startSendTaskFunc();
-                response = await WaitResultAsync(requestId);
+                response = await WaitResultAsync(requestId, token: token);
             }
             while (response == null && !token.IsCancellationRequested);
             return response;
         }
 
-        internal async Task<MessageResult> WaitResultAsync(string msgId, int maxWaitSec = 65000)
+        internal async Task<MessageResult> WaitResultAsync(string msgId, int maxWaitSec = 65000, CancellationToken token = default)
         {
             var waiObj = new MessageResultWaitObject();
             asyncWaitingTasks.Add(msgId, waiObj);
-            var task = waiObj.Lock.WaitAsync();
+            var task = waiObj.Lock.WaitAsync(token);
             var completedTask = await Task.WhenAny(task, Task.Delay(650_000));
             return waiObj.Result;
         }

+ 8 - 8
EVCB_OCPP.WSServer/Service/DbService/MainDbService.cs

@@ -42,8 +42,8 @@ public interface IMainDbService
     Task<bool> UpdateHeartBeats(List<string> machineIds);
     Task UpdateTransactionSOC(int id, string startsoc, string stopsoc);
     Task UpdateMachineConnectionType(string chargeBoxId, int v);
-    Task<string> GetMachineConnectorType(string chargeBoxId);
-    Task SetMachineConnectionType(string chargeBoxId, int v);
+    Task<string> GetMachineConnectorType(string chargeBoxId, CancellationToken token = default);
+    Task SetMachineConnectionType(string chargeBoxId, int connectionType, CancellationToken token = default);
 }
 
 public class MainDbService : IMainDbService
@@ -976,11 +976,11 @@ public class MainDbService : IMainDbService
         return true;
     }
 
-    public async Task<string> GetMachineConnectorType(string chargeBoxId)
+    public async Task<string> GetMachineConnectorType(string chargeBoxId, CancellationToken token = default)
     {
-        using var db = await contextFactory.CreateDbContextAsync();
+        using var db = await contextFactory.CreateDbContextAsync(token);
 
-        var machine = await db.Machine.Where(x => x.ChargeBoxId == chargeBoxId).FirstOrDefaultAsync();
+        var machine = await db.Machine.Where(x => x.ChargeBoxId == chargeBoxId).FirstOrDefaultAsync(token);
         if (machine == null)
         {
             return null;
@@ -988,11 +988,11 @@ public class MainDbService : IMainDbService
         return machine.ConnectorType;
     }
 
-    public async Task SetMachineConnectionType(string chargeBoxId,int v)
+    public async Task SetMachineConnectionType(string chargeBoxId,int v, CancellationToken token = default)
     {
-        using var db = await contextFactory.CreateDbContextAsync();
+        using var db = await contextFactory.CreateDbContextAsync(token);
 
-        var machine = await db.Machine.Where(x => x.ChargeBoxId == chargeBoxId).FirstOrDefaultAsync();
+        var machine = await db.Machine.Where(x => x.ChargeBoxId == chargeBoxId).FirstOrDefaultAsync(token);
         if (machine == null)
         {
             return;

+ 3 - 0
EVCB_OCPP.WSServer/Service/StationConfigService.cs

@@ -18,6 +18,9 @@ public static class StationConfigServiceExt
 {
     public static Task InitStationConfigService(this IHost host)
     {
+        var server = host.Services.GetRequiredService<ProtalServer>();
+        var stationConfigService = host.Services.GetRequiredService<StationConfigService>();
+        server.InitActions.Add(stationConfigService.CheckAndUpdateEvseConfig);
         return host.Services.GetRequiredService<StationConfigService>().Init();
     }
 }