From 890faa7b6b92bbb0a4d3e942817e1d60e00c2a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=84=9C?= Date: Wed, 3 Apr 2024 16:53:27 +0900 Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A1=A0=20=ED=98=95=ED=83=9C?= =?UTF-8?q?=EC=9D=98=20=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=84=EC=9A=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/Server.csproj | 1 + Server/System/Scheduler.cs | 69 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 Server/System/Scheduler.cs diff --git a/Server/Server.csproj b/Server/Server.csproj index da6294f..e350cb3 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -21,6 +21,7 @@ + diff --git a/Server/System/Scheduler.cs b/Server/System/Scheduler.cs new file mode 100644 index 0000000..a6848e9 --- /dev/null +++ b/Server/System/Scheduler.cs @@ -0,0 +1,69 @@ +using Quartz; +using Quartz.Impl; + +namespace Server.System +{ + public abstract class Scheduler : IJob + { + + private string _cron; + public string cron { get { return _cron; } } + + public Scheduler(string cronData) + { + _cron = cronData; + } + + public abstract void Process(); + public async Task Execute(IJobExecutionContext context) + { + Console.WriteLine("Job 실행됨: " + DateTime.Now); + Process(); + await Task.CompletedTask; + } + } + + public class schedule + { + private IScheduler scheduler; + private List schedules = new List(); + + public void Add(Scheduler scheduler) + { + schedules.Add(scheduler); + } + + public async Task Start() + { + // 스케줄러 생성 + ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); + scheduler = await schedulerFactory.GetScheduler(); + + // 스케줄러 시작 + await scheduler.Start(); + + // schedules에 있는 스케줄들을 스케줄러에 등록 + foreach (var schedule in schedules) + { + IJobDetail job = JobBuilder.Create() + .WithIdentity(schedule.GetType().Name, "group1") // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성 + .Build(); + + ITrigger trigger = TriggerBuilder.Create() + .WithIdentity(schedule.GetType().Name + "Trigger", "group1") + .WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용 + .Build(); + + await scheduler.ScheduleJob(job, trigger); + } + + // 프로그램이 종료되지 않도록 대기 + await Task.Delay(TimeSpan.FromDays(365)); + } + public async Task Stop() + { + // 스케줄러 중지 + await scheduler.Shutdown(); + } + } +}