VendorIdReplaceService.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using EVCB_OCPP.Packet.Messages.Core;
  2. using EVCB_OCPP.WSServer.Message;
  3. using EVCB_OCPP.WSServer.Service.WsService;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Hosting;
  6. using Microsoft.Extensions.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace EVCB_OCPP.WSServer.Service
  13. {
  14. public static class VendorIdReplaceServiceExt
  15. {
  16. public static Task InitVendorIdReplaceService(this IHost host)
  17. {
  18. var server = host.Services.GetRequiredService<ProtalServer>();
  19. var vendorIdReplaceService = host.Services.GetRequiredService<VendorIdReplaceService>();
  20. server.InitActions.Add(vendorIdReplaceService.GetAndRecordVendorId);
  21. return host.Services.GetRequiredService<StationConfigService>().Init();
  22. }
  23. }
  24. internal class VendorIdReplaceService
  25. {
  26. public VendorIdReplaceService(
  27. ProtalServer protalServer
  28. , ServerMessageService messageService
  29. , ConfirmWaitingMessageSerevice confirmWaitingMessageSerevice
  30. , ILogger<VendorIdReplaceService> logger
  31. )
  32. {
  33. this.protalServer = protalServer;
  34. this.messageService = messageService;
  35. this.confirmWaitingMessageSerevice = confirmWaitingMessageSerevice;
  36. this.logger = logger;
  37. }
  38. private readonly ProtalServer protalServer;
  39. private readonly ServerMessageService messageService;
  40. private readonly ConfirmWaitingMessageSerevice confirmWaitingMessageSerevice;
  41. private readonly ILogger<VendorIdReplaceService> logger;
  42. internal async Task GetAndRecordVendorId(WsClientData wsClient, CancellationToken token)
  43. {
  44. var getEvseCurrentConfigResponse = await GetEvseCurrentConfig(wsClient.ChargeBoxId, token);
  45. if (!getEvseCurrentConfigResponse.Success ||
  46. getEvseCurrentConfigResponse.Message is not GetConfigurationConfirmation confirmation)
  47. {
  48. logger.LogWarning("{chargeBoxId} get config from evse failed", wsClient.ChargeBoxId);
  49. return;
  50. }
  51. var vendorId = confirmation.configurationKey?.FirstOrDefault(x => x.key == "ChargePointVendorId");
  52. if (vendorId is null)
  53. {
  54. logger.LogWarning("{chargeBoxId} get vendorId from evse failed", wsClient.ChargeBoxId);
  55. return;
  56. }
  57. }
  58. private async Task<MessageResult> GetEvseCurrentConfig(string chargeBoxId, CancellationToken token = default)
  59. {
  60. var sendTask = async () => await messageService.SendGetEVSEConfigureRequest(chargeBoxId);
  61. var response = await confirmWaitingMessageSerevice.SendAndWaitUntilResultAsync(sendTask, token);
  62. return response;
  63. }
  64. private int? GetSessionVendorId(WsClientData session)
  65. {
  66. if (session is null ||
  67. !session.Data.ContainsKey(Session_Station_Key))
  68. {
  69. return null;
  70. }
  71. return (int?)session.Data[Session_Station_Key];
  72. }
  73. private void SetSessionStation(WsClientData session, int? stationId)
  74. {
  75. if (session is null)
  76. {
  77. return;
  78. }
  79. session.Data[Session_Station_Key] = stationId;
  80. }
  81. }
  82. }