thewar_server/Server/System/schedule.cs

58 lines
1.4 KiB
C#

using Quartz;
using Quartz.Impl;
namespace Server.System
{
public abstract class Scheduler : IJob
{
public abstract void Process();
public async Task Execute(IJobExecutionContext context)
{
Process();
}
}
public class Schedule<T> where T : Scheduler
{
private StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
private IScheduler scheduler;
private string jobName;
private string group;
private string triggerName;
private string cron;
public Schedule(string jobName, string group, string triggerName, string cron)
{
this.jobName = jobName;
this.group = group;
this.triggerName = triggerName;
this.cron = cron;
}
public async Task Start()
{
scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();
IJobDetail job = JobBuilder.Create<T>()
.WithIdentity(jobName, group)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(triggerName, group)
.StartNow()
.WithCronSchedule(cron)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
public async Task Stop()
{
await scheduler.Shutdown();
}
}
}