HostedProtalServer.cs 5.6 KB

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