세션 처리용 코드 추가

This commit is contained in:
김민서 2024-04-04 18:06:58 +09:00
parent 914de7dea9
commit a3e981310f
5 changed files with 45 additions and 10 deletions

View File

@ -7,25 +7,18 @@ namespace Server.Scheduler
{
public override void Process()
{
List<LoginUser> users = Statics.redis.GetList<LoginUser>("LoginUser");
List<string> users = Statics.redis.GetList<string>("LoginUser");
DateTime now = DateTime.Now;
for (int n = users.Count - 1; n >= 0; n--)
{
if ((now - users[n].moveTime).TotalMinutes >= 10)
if ((now - (DateTime)Statics.redis.GetHash("end_login", "UserInfo", users[n])).TotalMinutes >= 10)
{
Statics.redis.RemoveList(n, users[n], "LoginUser");
Statics.redis.RemoveKey("UserSession", users[n].UUID);
Statics.redis.RemoveKey("UserSession", users[n]);
}
}
}
public class LoginUser
{
public string UUID;
public DateTime moveTime;
}
}
}

View File

@ -5,6 +5,7 @@ using Server.Manager;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using System.Collections.Generic;
using Server.SQL.Excel;
using static Server.Scheduler.SessionScheduler;
namespace Server.Service
{
@ -95,6 +96,20 @@ namespace Server.Service
#endregion
}
#endregion
#region
string loginUUID = Guid.NewGuid().ToString();
Statics.redis.SetList(loginUUID, "LoginUsers");
Dictionary<string, object> userInfo = new Dictionary<string, object>();
userInfo.Add("id", user.id);
userInfo.Add("nickname ", user.nickname);
userInfo.Add("gold ", user.gold);
userInfo.Add("free_cash", user.free_cash);
userInfo.Add("pay_cash", user.pay_cash);
userInfo.Add("end_login", DateTime.Now);
Statics.redis.SetHash(userInfo, "UserInfo", loginUUID);
#endregion
#region
//리셋 상점
List<ResetShopItem> resetShopItem = Statics.resetShopItemSQL.SelectUid(user.id);

View File

@ -1,4 +1,6 @@
using Newtonsoft.Json;
using Server.SQL;
using static Server.Scheduler.SessionScheduler;
namespace Server.System
{
@ -26,10 +28,32 @@ namespace Server.System
public Protocol cmd;
public string uuid;
public User user;
public virtual bool IsReceivedAllField()
{
return true;
}
public virtual bool GetRedis()
{
try
{
Dictionary<string, object> hash = Statics.redis.GetAllHash("UserInfo", uuid);
user.id = (int)hash["id"];
user.nickname = (string)hash["nickname"];
user.gold = (int)hash["gold"];
user.free_cash = (int)hash["free_cash"];
user.pay_cash = (int)hash["pay_cash"];
Statics.redis.SetHash("end_login", DateTime.Now, "UserInfo", uuid);
return true;
}
catch (Exception e)
{
return false;
}
}
}
/// <summary>

View File

@ -31,6 +31,7 @@ public enum Error
NotFound = 404,//프로토콜 없음
Unknown = 500,//파라미터 오류
ErrorData = 501,//잘못된 데이터
NullSession = 502,//세션 만료
Crypto = 800,//암복호화 에러
NoData = 900,//데이터가 없음
NoGold = 901,//소모재화가 없음

View File

@ -52,6 +52,8 @@ namespace Server.System {
throw new RuntimeException("", Error.NoData);
else if (!req.IsReceivedAllField())
throw new RuntimeException("Internal Server Error", Error.Unknown);
else if (!req.GetRedis())
throw new RuntimeException("null session", Error.NullSession);
Response = abstractService.Process();