세션 관리용 스케줄러 추가
This commit is contained in:
parent
86aa5c663b
commit
ec53ec0b50
|
|
@ -1,3 +1,4 @@
|
||||||
|
using Server.Scheduler;
|
||||||
using Server.System;
|
using Server.System;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
@ -8,6 +9,9 @@ ProtocolProcessor.Init();
|
||||||
//깃 웹훅 초기화
|
//깃 웹훅 초기화
|
||||||
GItWebhook.Init();
|
GItWebhook.Init();
|
||||||
|
|
||||||
|
//스케줄러 초기화
|
||||||
|
Statics.session.Start();
|
||||||
|
|
||||||
//http용 데이터
|
//http용 데이터
|
||||||
app.MapPost("/", ProtocolProcessor.Process);
|
app.MapPost("/", ProtocolProcessor.Process);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,32 +5,18 @@ namespace Server.Scheduler
|
||||||
{
|
{
|
||||||
public class SessionScheduler : System.Scheduler
|
public class SessionScheduler : System.Scheduler
|
||||||
{
|
{
|
||||||
System.Redis redis;
|
|
||||||
|
|
||||||
NLog.ILogger logger = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
public SessionScheduler(string cronData, Redis redis) : base(cronData)
|
|
||||||
{
|
|
||||||
this.redis = redis;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Process()
|
public override void Process()
|
||||||
{
|
{
|
||||||
List<LoginUser> users = redis.GetList<LoginUser>("LoginUser");
|
List<LoginUser> users = Statics.redis.GetList<LoginUser>("LoginUser");
|
||||||
|
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
Console.WriteLine($"SessionScheduler : {now.ToString()}");
|
|
||||||
|
|
||||||
//logger.Debug($"SessionScheduler : {now.ToString()}");
|
|
||||||
|
|
||||||
|
|
||||||
for (int n = users.Count - 1; n >= 0; n--)
|
for (int n = users.Count - 1; n >= 0; n--)
|
||||||
{
|
{
|
||||||
if ((now - users[n].moveTime).TotalMinutes >= 1) //1분이상 지난상태
|
if ((now - users[n].moveTime).TotalMinutes >= 10)
|
||||||
{
|
{
|
||||||
redis.RemoveList(n, users[n], "LoginUser");
|
Statics.redis.RemoveList(n, users[n], "LoginUser");
|
||||||
redis.RemoveKey("UserSession", users[n].UUID);
|
Statics.redis.RemoveKey("UserSession", users[n].UUID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using Server.SQL;
|
using Server.Scheduler;
|
||||||
|
using Server.SQL;
|
||||||
using Server.SQL.Excel;
|
using Server.SQL.Excel;
|
||||||
|
|
||||||
namespace Server.System
|
namespace Server.System
|
||||||
|
|
@ -41,5 +42,8 @@ namespace Server.System
|
||||||
public static ShopItemDataExcel shopItemExcel = new ShopItemDataExcel();
|
public static ShopItemDataExcel shopItemExcel = new ShopItemDataExcel();
|
||||||
public static ConsumableItemDataExcel consumableItemExcel = new ConsumableItemDataExcel();
|
public static ConsumableItemDataExcel consumableItemExcel = new ConsumableItemDataExcel();
|
||||||
public static ResetShopItemDataExcel resetShopItemExcel = new ResetShopItemDataExcel();
|
public static ResetShopItemDataExcel resetShopItemExcel = new ResetShopItemDataExcel();
|
||||||
|
|
||||||
|
//
|
||||||
|
public static Schedule<SessionScheduler> session = new Schedule<SessionScheduler>("sessionJob", "sessionGroup", "Session", "0/5 * * * * ?");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,60 +6,48 @@ namespace Server.System
|
||||||
public abstract class Scheduler : IJob
|
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 abstract void Process();
|
||||||
public async Task Execute(IJobExecutionContext context)
|
public async Task Execute(IJobExecutionContext context)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Job 실행됨: " + DateTime.Now);
|
|
||||||
Process();
|
Process();
|
||||||
await Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class schedule
|
public class Schedule<T> where T : Scheduler
|
||||||
{
|
{
|
||||||
|
private StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
||||||
private IScheduler scheduler;
|
private IScheduler scheduler;
|
||||||
private List<Scheduler> schedules = new List<Scheduler>();
|
|
||||||
|
|
||||||
public void Add(Scheduler scheduler)
|
private string jobName;
|
||||||
|
private string group;
|
||||||
|
private string triggerName;
|
||||||
|
private string cron;
|
||||||
|
|
||||||
|
public Schedule(string jobName, string group, string triggerName, string cron)
|
||||||
{
|
{
|
||||||
schedules.Add(scheduler);
|
this.jobName = jobName;
|
||||||
|
this.group = group;
|
||||||
|
this.triggerName = triggerName;
|
||||||
|
this.cron = cron;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Start()
|
public async Task Start()
|
||||||
{
|
{
|
||||||
Console.WriteLine("scheduler: " + schedules.Count);
|
scheduler = await schedulerFactory.GetScheduler();
|
||||||
// 스케줄러 생성
|
|
||||||
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
|
||||||
IScheduler scheduler = await schedulerFactory.GetScheduler();
|
|
||||||
|
|
||||||
// 스케줄러 시작
|
|
||||||
await scheduler.Start();
|
await scheduler.Start();
|
||||||
|
|
||||||
// schedules에 있는 스케줄들을 스케줄러에 등록
|
IJobDetail job = JobBuilder.Create<T>()
|
||||||
foreach (var schedule in schedules)
|
.WithIdentity(jobName, group)
|
||||||
{
|
.Build();
|
||||||
IJobDetail job = JobBuilder.Create<Scheduler>()
|
|
||||||
.WithIdentity(schedule.GetType().Name, "group" + schedule.GetType().Name) // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
ITrigger trigger = TriggerBuilder.Create()
|
ITrigger trigger = TriggerBuilder.Create()
|
||||||
.WithIdentity(schedule.GetType().Name + "Trigger", "group" + schedule.GetType().Name)
|
.WithIdentity(triggerName, group)
|
||||||
.WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용
|
.StartNow()
|
||||||
.Build();
|
.WithCronSchedule(cron)
|
||||||
|
.Build();
|
||||||
|
|
||||||
await scheduler.ScheduleJob(job, trigger);
|
await scheduler.ScheduleJob(job, trigger);
|
||||||
}
|
|
||||||
|
|
||||||
// 프로그램이 종료되지 않도록 대기
|
|
||||||
await Task.Delay(TimeSpan.FromDays(365));
|
|
||||||
}
|
}
|
||||||
public async Task Stop()
|
public async Task Stop()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue