|
@@ -0,0 +1,94 @@
|
|
|
+using EVCB_OCPP.Packet.Messages.Core;
|
|
|
+using EVCB_OCPP.WSServer.Message;
|
|
|
+using EVCB_OCPP.WSServer.Service.WsService;
|
|
|
+using Microsoft.Extensions.DependencyInjection;
|
|
|
+using Microsoft.Extensions.Hosting;
|
|
|
+using Microsoft.Extensions.Logging;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+
|
|
|
+namespace EVCB_OCPP.WSServer.Service
|
|
|
+{
|
|
|
+ public static class VendorIdReplaceServiceExt
|
|
|
+ {
|
|
|
+ public static Task InitVendorIdReplaceService(this IHost host)
|
|
|
+ {
|
|
|
+ var server = host.Services.GetRequiredService<ProtalServer>();
|
|
|
+ var vendorIdReplaceService = host.Services.GetRequiredService<VendorIdReplaceService>();
|
|
|
+ server.InitActions.Add(vendorIdReplaceService.GetAndRecordVendorId);
|
|
|
+ return host.Services.GetRequiredService<StationConfigService>().Init();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ internal class VendorIdReplaceService
|
|
|
+ {
|
|
|
+ public VendorIdReplaceService(
|
|
|
+ ProtalServer protalServer
|
|
|
+ , ServerMessageService messageService
|
|
|
+ , ConfirmWaitingMessageSerevice confirmWaitingMessageSerevice
|
|
|
+ , ILogger<VendorIdReplaceService> logger
|
|
|
+ )
|
|
|
+ {
|
|
|
+ this.protalServer = protalServer;
|
|
|
+ this.messageService = messageService;
|
|
|
+ this.confirmWaitingMessageSerevice = confirmWaitingMessageSerevice;
|
|
|
+ this.logger = logger;
|
|
|
+ }
|
|
|
+
|
|
|
+ private readonly ProtalServer protalServer;
|
|
|
+ private readonly ServerMessageService messageService;
|
|
|
+ private readonly ConfirmWaitingMessageSerevice confirmWaitingMessageSerevice;
|
|
|
+ private readonly ILogger<VendorIdReplaceService> logger;
|
|
|
+
|
|
|
+ internal async Task GetAndRecordVendorId(WsClientData wsClient, CancellationToken token)
|
|
|
+ {
|
|
|
+ var getEvseCurrentConfigResponse = await GetEvseCurrentConfig(wsClient.ChargeBoxId, token);
|
|
|
+
|
|
|
+ if (!getEvseCurrentConfigResponse.Success ||
|
|
|
+ getEvseCurrentConfigResponse.Message is not GetConfigurationConfirmation confirmation)
|
|
|
+ {
|
|
|
+ logger.LogWarning("{chargeBoxId} get config from evse failed", wsClient.ChargeBoxId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var vendorId = confirmation.configurationKey?.FirstOrDefault(x => x.key == "ChargePointVendorId");
|
|
|
+ if (vendorId is null)
|
|
|
+ {
|
|
|
+ logger.LogWarning("{chargeBoxId} get vendorId from evse failed", wsClient.ChargeBoxId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private async Task<MessageResult> GetEvseCurrentConfig(string chargeBoxId, CancellationToken token = default)
|
|
|
+ {
|
|
|
+ var sendTask = async () => await messageService.SendGetEVSEConfigureRequest(chargeBoxId);
|
|
|
+ var response = await confirmWaitingMessageSerevice.SendAndWaitUntilResultAsync(sendTask, token);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int? GetSessionVendorId(WsClientData session)
|
|
|
+ {
|
|
|
+ if (session is null ||
|
|
|
+ !session.Data.ContainsKey(Session_Station_Key))
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return (int?)session.Data[Session_Station_Key];
|
|
|
+ }
|
|
|
+
|
|
|
+ private void SetSessionStation(WsClientData session, int? stationId)
|
|
|
+ {
|
|
|
+ if (session is null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ session.Data[Session_Station_Key] = stationId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|