스케줄 테스트 임시 커밋

This commit is contained in:
김민서 2024-04-04 11:58:34 +09:00
parent 9c400bb0bd
commit 86aa5c663b
4 changed files with 50 additions and 9 deletions

View File

@ -1,18 +1,45 @@
using Server.System; using NLog;
using Server.System;
namespace Server.Scheduler namespace Server.Scheduler
{ {
public class SessionScheduler : System.Scheduler public class SessionScheduler : System.Scheduler
{ {
System.Redis redis = new Redis(); System.Redis redis;
public SessionScheduler(string cronData) : base(cronData)
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형태로 따로 저장해두기. List<LoginUser> users = redis.GetList<LoginUser>("LoginUser");
//redis.GetHash()
DateTime now = DateTime.Now;
Console.WriteLine($"SessionScheduler : {now.ToString()}");
//logger.Debug($"SessionScheduler : {now.ToString()}");
for (int n = users.Count - 1; n >= 0; n--)
{
if ((now - users[n].moveTime).TotalMinutes >= 1) //1분이상 지난상태
{
redis.RemoveList(n, users[n], "LoginUser");
redis.RemoveKey("UserSession", users[n].UUID);
}
}
} }
public class LoginUser
{
public string UUID;
public DateTime moveTime;
}
} }
} }

View File

@ -240,6 +240,19 @@ namespace Server.System
return db.HashGet(KeySet(keys), field); return db.HashGet(KeySet(keys), field);
} }
public void RemoveKey(params string[] keys)
{
if (local)
{
stringType.Remove(KeySet(keys));
listType.Remove(KeySet(keys));
zType.Remove(KeySet(keys));
hashType.Remove(KeySet(keys));
}
else
db.KeyDelete(KeySet(keys));
}
private string KeySet(string[] keys) private string KeySet(string[] keys)
{ {
return string.Join(":", keys); return string.Join(":", keys);

View File

@ -14,7 +14,7 @@ namespace Server.System
public static readonly string EXCEL_SQL_URL = "Host=192.168.0.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; public static readonly string EXCEL_SQL_URL = "Host=192.168.0.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;";
public static readonly string remoteUrl = "https://manager:BQNl01bJJF0wn9R@gitea.pandoli365.com/Team.thewar/thewar_excel_live.git"; public static readonly string remoteUrl = "https://manager:BQNl01bJJF0wn9R@gitea.pandoli365.com/Team.thewar/thewar_excel_live.git";
#endif #endif
public static readonly Redis redis = new Redis("172.16.18.244", 48600);
public static readonly string URL = "https://0.0.0.0:4860"; public static readonly string URL = "https://0.0.0.0:4860";

View File

@ -35,9 +35,10 @@ namespace Server.System
public async Task Start() public async Task Start()
{ {
Console.WriteLine("scheduler: " + schedules.Count);
// 스케줄러 생성 // 스케줄러 생성
ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = await schedulerFactory.GetScheduler(); IScheduler scheduler = await schedulerFactory.GetScheduler();
// 스케줄러 시작 // 스케줄러 시작
await scheduler.Start(); await scheduler.Start();
@ -46,11 +47,11 @@ namespace Server.System
foreach (var schedule in schedules) foreach (var schedule in schedules)
{ {
IJobDetail job = JobBuilder.Create<Scheduler>() IJobDetail job = JobBuilder.Create<Scheduler>()
.WithIdentity(schedule.GetType().Name, "group1") // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성 .WithIdentity(schedule.GetType().Name, "group" + schedule.GetType().Name) // Scheduler 클래스의 이름을 사용하여 고유한 ID 생성
.Build(); .Build();
ITrigger trigger = TriggerBuilder.Create() ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(schedule.GetType().Name + "Trigger", "group1") .WithIdentity(schedule.GetType().Name + "Trigger", "group" + schedule.GetType().Name)
.WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용 .WithCronSchedule(schedule.cron) // 스케줄의 cron 표현식 사용
.Build(); .Build();