using EVCB_OCPP.Domain; using EVCB_OCPP.Domain.Extensions; using EVCB_OCPP.Service; using EVCB_OCPP.WSServer.Fake; using EVCB_OCPP.WSServer.Helper; using EVCB_OCPP.WSServer.Jobs; using EVCB_OCPP.WSServer.Message; using EVCB_OCPP.WSServer.Service; using EVCB_OCPP.WSServer.Service.DbService; using EVCB_OCPP.WSServer.Service.WsService; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EVCB_OCPP.WSServer { public static class HostedProtalServer { public static void AddProtalServer(this IServiceCollection services, IConfiguration configuration) { services.AddMemoryCache(); //services.AddSingleton(); services.AddPortalServerDatabase(configuration); services.AddBusinessServiceFactory(); //services.AddTransient(); //services.AddTransient(); services.AddHeaderRecordService(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddOcppWsServer(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddSingleton(); services.AddHostedService(p => p.GetRequiredService()); services.AddProtalServerJob(); } internal static void AddPortalServerDatabase(this IServiceCollection services, IConfiguration configuration) { services .AddMainDbContext(configuration) .AddMeterValueDbContext(configuration) .AddConnectionLogDbContext(configuration) .AddWebDBConetext(configuration); } public static void AddProtalServerJob(this IServiceCollection services) { services.AddQuartz(q => { q.UseMicrosoftDependencyInjectionJobFactory(); q.ScheduleJob(trigger => trigger .WithIdentity("ServerUpdateJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(3) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("ServerSetFeeJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(1) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("ServerMessageJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithInterval(TimeSpan.FromMilliseconds(500)) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("HeartBeatCheckJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(30) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("HealthCheckTriggerJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(1) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("SmartChargingJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(1) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("DenyModelCheckJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInMinutes(5) .RepeatForever()) ); q.ScheduleJob(trigger => trigger .WithIdentity("StationConfigPollingJobTrigger") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(30) .RepeatForever()) ); //q.ScheduleJob(trigger => // trigger // .WithIdentity("GoogleCheckJobTrigger") // .StartNow() // .WithSimpleSchedule(x => x // .WithIntervalInSeconds(5) // .RepeatForever()) //); }); services.AddQuartzHostedService(opt => { opt.WaitForJobsToComplete = true; }); } } }