HostedProtalServer.cs 5.0 KB

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