Files
caliverse_server/ServerCommon/z.Backup/LoginStorage.cs
2025-05-01 07:20:41 +09:00

352 lines
14 KiB
C#

//using Newtonsoft.Json;
//using OtpNet;
//using ServerCore; using ServerBase;
//using StackExchange.Redis;
//namespace ServerCommon
//{
// public class LoginInfo
// {
// public string Name = string.Empty;
// public string Guid = string.Empty;
// public string Email = string.Empty;
// public DateTime LoginTime;
// public LanguageType Language = LanguageType.None;
// public int State = 0;
// public string CurrentServer = String.Empty;
// public string PartyGuid = string.Empty;
// public string InstanceRoomId = string.Empty;
// public class MoveInfo
// {
// public string OneTimeKey = string.Empty;
// public string DestServer = string.Empty;
// }
// public MoveInfo? Moving;
// public bool ReadFrom(AccountAttr? attr, string curServer)
// {
// if (attr == null)
// {
// Log.getLogger().error("attr is null");
// return false;
// }
// Name = attr?.Id ?? string.Empty;
// Guid = attr?.Aid ?? string.Empty;
// Email = attr?.Email ?? string.Empty;
// Language = attr?.Language ?? LanguageType.None;
// LoginTime = attr?.LoginDate ?? DateTime.UtcNow;
// CurrentServer = curServer;
// return true;
// }
// }
// /// <summary>
// /// 유저 로그인 정보
// /// </summary>
// public class LoginStorage : IInitializer
// {
// readonly int KEEP_LOGIN_TIME_OUT = (60 * 1000);
// //readonly int KEEP_WAIT_QUEUE_TIME = (30 * 1000);
// //ConnectionMultiplexer _connection = default!;
// IDatabase _database = default!;
// string _keyPrefix = string.Empty;
// public LoginStorage(IDatabase redisDb, string keyPrefix)
// {
// Init(redisDb, keyPrefix);
// }
// public async Task<Result> onInit()
// {
// await Task.CompletedTask;
// var result = new Result();
// return result;
// }
// public LoginStorage()
// {
// }
// public void Init(IDatabase redisDB, string keyPrefix)
// {
// //var connection = await ConnectionMultiplexer.ConnectAsync(configuration);
// //_database = _connection.GetDatabase();
// _database = redisDB;
// _keyPrefix = keyPrefix;
// if (!_keyPrefix.EndsWith(":"))
// _keyPrefix += ":";
// _keyPrefix += "login:";
// }
// string KeyWithPrefix(string key) => _keyPrefix + key;
// /*
// * 로그인 서버 로그인
// */
// public async Task<(ServerErrorCode, string)> Login(LoginInfo? login)
// {
// if (login == null)
// {
// Log.getLogger().error("login is null ");
// return (ServerErrorCode.DbError, string.Empty);
// }
// string key = KeyWithPrefix(login.Name);
// Log.getLogger().debug($"login Id:{login.Name} guid:{login.Guid} email:{login.Email} server:{login.CurrentServer} key:{key} loginTime:{login.LoginTime.ToString("s")}");
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue)
// {
// login = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (login == null)
// {
// // TODO: 로그 출력 수정 필요.
// Log.getLogger().error($"login is null !!!, login Id:{login?.Name} guid:{login?.Guid} email:{login?.Email} server:{login?.CurrentServer} key:{key} loginTime:{login?.LoginTime.ToString("s")}");
// return (ServerErrorCode.DbError, string.Empty);
// }
// if (login.Moving != null)
// {
// Log.getLogger().error($"Moving Error Id:{login.Name} guid:{login.Guid} email:{login.Email} server:{login.CurrentServer} loginTime:{login.LoginTime.ToString("s")} value:{value}");
// return (ServerErrorCode.Moving, login.Moving.DestServer);
// }
// Log.getLogger().error($" DupLogin Id:{login.Name} guid:{login.Guid} email:{login.Email} server:{login.CurrentServer} loginTime:{login.LoginTime.ToString("s")} value:{value}");
// return (ServerErrorCode.DupLogin, login.CurrentServer);
// }
// login.LoginTime = DateTimeHelper.Current;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(login), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT)) == false)
// {
// Log.getLogger().error($"Id:{login.Name} guid:{login.Guid} email:{login.Email} server:{login.CurrentServer} loginTime:{login.LoginTime.ToString("s")} value:{value}");
// return (ServerErrorCode.DbError, string.Empty);
// }
// Log.getLogger().info($"login Id:{login.Name} guid:{login.Guid} email:{login.Email} server:{login.CurrentServer} loginTime:{login.LoginTime.ToString("s")}");
// return (ServerErrorCode.Success, string.Empty);
// }
// public async Task Logout(string name)
// {
// Log.getLogger().info($"{name} Logout");
// string key = KeyWithPrefix(name);
// await _database.KeyDeleteAsync(key);
// }
// public async Task<bool> KeepLogin(string name, LoginInfo login)
// {
// try
// {
// //Log.getLogger().info($"KeepLogin Key:{name}");
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// if (login.Name == string.Empty)
// {
// Log.getLogger().error($"KeepLogin. value null Key:{key} id:{name}");
// return false;
// }
// value = JsonConvert.SerializeObject(login);
// Log.getLogger().warn($"KeepLogin. new value Key:{key} new value : {value} {login.Name}");
// }
// // 레디스에 저장된 로그인 해있는 서버와 KeepLogin을 실행한 서버를 비교
// // 다르면 중복 로그인으로 보고 로그아웃 처리한다
// //Log.getLogger().debug($"KeepLogin. Key:{key} id:{name}");
// return await _database.StringSetAsync(key, value, TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT));
// }
// catch (Exception e)
// {
// Log.getLogger().error($"KeepLogin Key:{name} {e}");
// return false;
// }
// }
// public async Task<LoginInfo?> GetLoginInfo(string name)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} GetLoginInfo Key:{key} value.HasValue==false");
// return null;
// }
// Log.getLogger().info($"{name} GetLoginInfo Key:{key} Value:{value.ToString()}");
// return JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// }
// public async Task<bool> ChangeState(string name, int state)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} GetLoginInfo Key:{key} value.HasValue==false");
// return false;
// }
// LoginInfo? login = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (login == null)
// {
// Log.getLogger().error($"{name} Json parsing errer Key:{key} value:{value.ToString()}");
// return false;
// }
// login.State = state;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(login), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT)) == false)
// {
// Log.getLogger().error($"{name} StringSetAsync fail Key:{key} value:{value.ToString()}");
// return false;
// }
// return true;
// }
// public async Task<bool> ChangePartyGuid(string name, string partyGuid)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} GetLoginInfo Key:{key} value.HasValue==false");
// return false;
// }
// LoginInfo? login = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (login == null)
// {
// Log.getLogger().error($"{name} Json parsing errer Key:{key} value:{value.ToString()}");
// return false;
// }
// login.PartyGuid = partyGuid;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(login), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT)) == false)
// {
// Log.getLogger().error($"{name} StringSetAsync fail Key:{key} value:{value.ToString()}");
// return false;
// }
// return true;
// }
// public async Task<bool> ChangeInstanceRoomId(string name, string instanceRoomId)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} GetLoginInfo Key:{key} value.HasValue==false");
// return false;
// }
// LoginInfo? login = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (login == null)
// {
// Log.getLogger().error($"{name} Json parsing errer Key:{key} value:{value.ToString()}");
// return false;
// }
// login.InstanceRoomId = instanceRoomId;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(login), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT)) == false)
// {
// Log.getLogger().error($"{name} StringSetAsync fail Key:{key} value:{value.ToString()}");
// return false;
// }
// return true;
// }
// public async Task<string> StartMoving(string name, string destServer)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} Not found Key:{key}");
// return string.Empty;
// }
// LoginInfo? login = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (login == null)
// {
// Log.getLogger().error($"{name} Json parsing errer Key:{key} value:{value.ToString()}");
// return string.Empty;
// }
// var otp = KeyGeneration.GenerateRandomKey(20);
// var base32otp = Base32Encoding.ToString(otp);
// login.Moving = new LoginInfo.MoveInfo();
// login.Moving.OneTimeKey = base32otp;
// login.Moving.DestServer = destServer;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(login), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT*5)) == false)
// {
// Log.getLogger().error($"{name} StringSetAsync fail Key:{key} value:{value.ToString()}");
// return string.Empty;
// }
// Log.getLogger().info($"{name} StartMoving To {destServer}");
// return base32otp;
// }
// public async Task<bool> EndMoving(string name, DateTime loginTime)
// {
// string key = KeyWithPrefix(name);
// var value = await _database.StringGetAsync(key, CommandFlags.PreferReplica);
// if (value.HasValue == false)
// {
// Log.getLogger().error($"{name} Not found key:{key}");
// return false;
// }
// LoginInfo? loginInfo = JsonConvert.DeserializeObject<LoginInfo>(value.ToString());
// if (loginInfo == null || loginInfo.Moving == null)
// {
// Log.getLogger().error($"{name} Json parsing error key:{key}, LoginInfo:{value.ToString()}");
// return false;
// }
// string departureServer = loginInfo.CurrentServer;
// loginInfo.LoginTime = loginTime;
// loginInfo.CurrentServer = loginInfo.Moving.DestServer;
// loginInfo.Moving = null;
// if (await _database.StringSetAsync(key, JsonConvert.SerializeObject(loginInfo), TimeSpan.FromMilliseconds(KEEP_LOGIN_TIME_OUT)) == false)
// {
// Log.getLogger().error($"{name} StringSetAsynct fail key:{key} value:{value.ToString()}");
// return false;
// }
// Log.getLogger().info($"{name} EndMoving From {departureServer}");
// return true;
// }
// }
//}