Added RaidTemplates and TimerService to create weekly raids
This commit is contained in:
parent
c215ed058f
commit
ab6602710d
13 changed files with 270 additions and 53 deletions
60
Lieb/Data/TimerService.cs
Normal file
60
Lieb/Data/TimerService.cs
Normal file
|
@ -0,0 +1,60 @@
|
|||
using Lieb.Models.GuildWars2.Raid;
|
||||
|
||||
namespace Lieb.Data
|
||||
{
|
||||
public class TimerService : IHostedService, IDisposable
|
||||
{
|
||||
private Timer _timer = null!;
|
||||
private IServiceProvider _services;
|
||||
|
||||
public TimerService(IServiceProvider services)
|
||||
{
|
||||
_services = services;
|
||||
}
|
||||
|
||||
public Task StartAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
_timer = new Timer(CheckRaids, null, TimeSpan.Zero,
|
||||
TimeSpan.FromMinutes(1));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private void CheckRaids(object? state)
|
||||
{
|
||||
using (var scope = _services.CreateScope())
|
||||
{
|
||||
var raidTemplateService =
|
||||
scope.ServiceProvider
|
||||
.GetRequiredService<RaidTemplateService>();
|
||||
|
||||
foreach(RaidTemplate template in raidTemplateService.GetTemplates())
|
||||
{
|
||||
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(template.TimeZone);
|
||||
DateTime UTCStartTime = TimeZoneInfo.ConvertTimeToUtc(template.StartTime, timeZone);
|
||||
if(UTCStartTime.AddDays(-template.CreateDaysBefore).AddHours(1) < DateTime.UtcNow)
|
||||
{
|
||||
raidTemplateService.CreateNewRaid(template.RaidTemplateId).Wait();
|
||||
}
|
||||
}
|
||||
|
||||
var raidService =
|
||||
scope.ServiceProvider
|
||||
.GetRequiredService<RaidService>();
|
||||
raidService.SendReminders();
|
||||
}
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
_timer?.Change(Timeout.Infinite, 0);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_timer?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue