HostedProtalServer.cs 5.1 KB

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