HostedProtalServer.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using EVCB_OCPP.Domain;
  2. using EVCB_OCPP.Domain.Extensions;
  3. using EVCB_OCPP.Service;
  4. using EVCB_OCPP.WSServer.Fake;
  5. using EVCB_OCPP.WSServer.Helper;
  6. using EVCB_OCPP.WSServer.Jobs;
  7. using EVCB_OCPP.WSServer.Message;
  8. using EVCB_OCPP.WSServer.Service;
  9. using EVCB_OCPP.WSServer.Service.BusinessService;
  10. using EVCB_OCPP.WSServer.Service.DbService;
  11. using EVCB_OCPP.WSServer.Service.WsService;
  12. using Microsoft.EntityFrameworkCore;
  13. using Microsoft.Extensions.Caching.Memory;
  14. using Microsoft.Extensions.Configuration;
  15. using Microsoft.Extensions.DependencyInjection;
  16. using Quartz;
  17. using System;
  18. using System.Collections.Generic;
  19. using System.Linq;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. namespace EVCB_OCPP.WSServer
  23. {
  24. public static class HostedProtalServer
  25. {
  26. public static void AddProtalServer(this IServiceCollection services, IConfiguration configuration)
  27. {
  28. services.AddMemoryCache();
  29. services.AddPortalServerDatabase(configuration);
  30. services.AddBusinessServiceFactory();
  31. services.AddHeaderRecordService();
  32. services.AddSingleton<ConnectorStatusDbService>();
  33. services.AddSingleton<MeterValueDbService>();
  34. services.AddSingleton<WebDbService>();
  35. services.AddSingleton<IMainDbService, MainDbService>();
  36. services.AddSingleton<IConnectionLogdbService, ConnectionLogdbService>();
  37. services.AddOcppWsServer();
  38. services.AddSingleton<ServerMessageService>();
  39. services.AddSingleton<StationConfigService>();
  40. services.AddSingleton<ConfirmWaitingMessageSerevice>();
  41. services.AddTransient<ProfileHandler>();
  42. services.AddSingleton<EnvCheckService>();
  43. services.AddSingleton<ProtalServer>();
  44. services.AddHostedService<ProtalServer>(p => p.GetRequiredService<ProtalServer>());
  45. services.AddProtalServerJob();
  46. }
  47. internal static void AddPortalServerDatabase(this IServiceCollection services, IConfiguration configuration)
  48. {
  49. services
  50. .AddMainDbContext(configuration)
  51. .AddMeterValueDbContext(configuration)
  52. .AddConnectionLogDbContext(configuration)
  53. .AddWebDBConetext(configuration)
  54. .AddOnlineRecordDBContext(configuration);
  55. }
  56. public static void AddProtalServerJob(this IServiceCollection services)
  57. {
  58. services.AddQuartz(q => {
  59. q.UseMicrosoftDependencyInjectionJobFactory();
  60. q.ScheduleJob<ServerUpdateJob>(trigger =>
  61. trigger
  62. .WithIdentity("ServerUpdateJobTrigger")
  63. .StartNow()
  64. .WithSimpleSchedule(x => x
  65. .WithIntervalInMinutes(3)
  66. .RepeatForever())
  67. );
  68. q.ScheduleJob<ServerSetFeeJob>(trigger =>
  69. trigger
  70. .WithIdentity("ServerSetFeeJobTrigger")
  71. .StartNow()
  72. .WithSimpleSchedule(x => x
  73. .WithIntervalInMinutes(1)
  74. .RepeatForever())
  75. );
  76. q.ScheduleJob<ServerMessageJob>(trigger =>
  77. trigger
  78. .WithIdentity("ServerMessageJobTrigger")
  79. .StartNow()
  80. .WithSimpleSchedule(x => x
  81. .WithInterval(TimeSpan.FromMilliseconds(500))
  82. .RepeatForever())
  83. );
  84. q.ScheduleJob<HeartBeatCheckJob>(trigger =>
  85. trigger
  86. .WithIdentity("HeartBeatCheckJobTrigger")
  87. .StartNow()
  88. .WithSimpleSchedule(x => x
  89. .WithIntervalInSeconds(30)
  90. .RepeatForever())
  91. );
  92. q.ScheduleJob<HealthCheckTriggerJob>(trigger =>
  93. trigger
  94. .WithIdentity("HealthCheckTriggerJobTrigger")
  95. .StartNow()
  96. .WithSimpleSchedule(x => x
  97. .WithIntervalInMinutes(1)
  98. .RepeatForever())
  99. );
  100. q.ScheduleJob<SmartChargingJob>(trigger =>
  101. trigger
  102. .WithIdentity("SmartChargingJobTrigger")
  103. .StartNow()
  104. .WithSimpleSchedule(x => x
  105. .WithIntervalInMinutes(1)
  106. .RepeatForever())
  107. );
  108. q.ScheduleJob<DenyModelCheckJob>(trigger =>
  109. trigger
  110. .WithIdentity("DenyModelCheckJobTrigger")
  111. .StartNow()
  112. .WithSimpleSchedule(x => x
  113. .WithIntervalInMinutes(5)
  114. .RepeatForever())
  115. );
  116. q.ScheduleJob<StationConfigPollingJob>(trigger =>
  117. trigger
  118. .WithIdentity("StationConfigPollingJobTrigger")
  119. .StartNow()
  120. .WithSimpleSchedule(x => x
  121. .WithIntervalInSeconds(30)
  122. .RepeatForever())
  123. );
  124. //q.ScheduleJob<GoogleCheckJob>(trigger =>
  125. // trigger
  126. // .WithIdentity("GoogleCheckJobTrigger")
  127. // .StartNow()
  128. // .WithSimpleSchedule(x => x
  129. // .WithIntervalInSeconds(5)
  130. // .RepeatForever())
  131. //);
  132. });
  133. services.AddQuartzHostedService(opt =>
  134. {
  135. opt.WaitForJobsToComplete = true;
  136. });
  137. }
  138. }
  139. }