64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
||
using Microsoft.Extensions.Logging;
|
||
using PARR.Master.Services;
|
||
using PARR.Master.Settings;
|
||
|
||
namespace PARR.Master
|
||
{
|
||
internal class Master : IMaster
|
||
{
|
||
private readonly WorkerSettings settings;
|
||
private readonly ILogger<Master> logger;
|
||
private readonly IServiceProvider serviceProvider;
|
||
|
||
public Master(
|
||
WorkerSettings settings,
|
||
ILogger<Master> logger,
|
||
IServiceProvider serviceProvider
|
||
)
|
||
{
|
||
this.settings = settings;
|
||
this.logger = logger;
|
||
this.serviceProvider = serviceProvider;
|
||
}
|
||
|
||
|
||
public async Task StartAsync()
|
||
{
|
||
logger.LogInformation("Запуск сервиса.");
|
||
|
||
var nextStart = DateTime.Now;
|
||
|
||
while (true)
|
||
{
|
||
if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute)
|
||
{
|
||
logger.LogInformation("Запуск по расписанию.");
|
||
|
||
await ManageOrdersAsync();
|
||
|
||
nextStart = DateTime.Now.Add(settings.RepeatEvery);
|
||
logger.LogInformation($"Следующая дата запуска: {nextStart}");
|
||
}
|
||
|
||
// Каждую минуту
|
||
await Task.Delay(60 * 1000);
|
||
}
|
||
}
|
||
|
||
|
||
private async Task ManageOrdersAsync()
|
||
{
|
||
using (var scope = serviceProvider.CreateScope())
|
||
{
|
||
var orderMasterService = scope.ServiceProvider.GetService<IOrderMasterService>();
|
||
if (orderMasterService == null)
|
||
throw new Exception("Не смог получить серивс IOrderMasterService, scope.ServiceProvider.GetService<IOrderMasterService>()");
|
||
|
||
await orderMasterService.ManageOrdersAsync();
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|