using Server.System; using Newtonsoft.Json; using Server.SQL; using Server.Manager; using Microsoft.AspNetCore.DataProtection.KeyManagement; namespace Server.Service { //프라이빗uuid가아닌 기기 ip를 받아와 확인 //유저 정보를 확인할때 ip도 같이 확인해서 만약 다르면 차단 public class Login : AbstractService { private LoginReq req; public override string Process() { User user; bool newUser = false; #region 로그인 List dynamicDataList = Statics.dynamicDataSQL.Select(); List deckInfoList = null; ItemManager itemManager = null; if (req.uuid == "") { //최초 메일 로그인 //게스트 로그인은 허용하지 않고 무조건 구글로그인 혹은 마스토돈 로그인만 가능하게 처리하기 user = Statics.userSQL.SelectMail(req.mail); if (user != null) { deckInfoList = Statics.deckInfoSQL.SelectUid(user.id); itemManager = new ItemManager(user); } } else { //기존 유저 로그인 user = Statics.userSQL.SelectUuid(req.uuid); if (user == null) { throw new RuntimeException("Not User", Error.nodata); } deckInfoList = Statics.deckInfoSQL.SelectUid(user.id); itemManager = new ItemManager(user); } if(user == null) { if (req.mail == "") { throw new RuntimeException("Not User", Error.nodata); } #region 신규유저 생성 newUser = true; user = new User(); user.mail = req.mail; user.uuid = Guid.NewGuid().ToString(); user.nickname = Statics.dynamicDataSQL.SelectName("defaultNick").value; Statics.userSQL.Insert(user); //저장하고 유닛의 id를 얻어오기 위함. Statics.userSQL.SaveChanges(); itemManager = new ItemManager(user); #endregion #region 초기 유닛 지급 itemManager.addUnit(100001); itemManager.addUnit(100002); itemManager.addUnit(100003); itemManager.addUnit(100004); itemManager.addUnit(100005); itemManager.addUnit(100006); itemManager.addUnit(100007); itemManager.addUnit(100008); itemManager.addUnit(100009); itemManager.box.SaveSQL(); #endregion #region 신규 덱 추가 DeckInfo deckInfo; deckInfo = new DeckInfo(); deckInfo.user_id= user.id; deckInfo.deck_type = 1; deckInfo.deck_unit0_id = itemManager.box.deckUnitInfo[0].id; deckInfo.deck_unit1_id = itemManager.box.deckUnitInfo[1].id; deckInfo.deck_unit2_id = itemManager.box.deckUnitInfo[2].id; deckInfo.deck_unit3_id = itemManager.box.deckUnitInfo[3].id; deckInfo.deck_unit4_id = itemManager.box.deckUnitInfo[4].id; deckInfo.deck_unit5_id = itemManager.box.deckUnitInfo[5].id; deckInfo.deck_unit6_id = itemManager.box.deckUnitInfo[6].id; deckInfo.deck_unit7_id = itemManager.box.deckUnitInfo[7].id; deckInfo.deck_unit8_id = itemManager.box.deckUnitInfo[8].id; Statics.deckInfoSQL.Insert(deckInfo); deckInfoList = new List { deckInfo }; #endregion } #endregion return makeResp(user, dynamicDataList, deckInfoList, itemManager, newUser); } public override Protocol ProtocolValue() => Protocol.Login; public override Req Requst(string json) { req = JsonConvert.DeserializeObject(json); return req; } private string makeResp(User user, List dynamicData, List deckInfo, ItemManager itemManager, bool newUser) { LoginResp resp = new LoginResp(); resp.nickname = user.nickname; resp.uuid = user.uuid; resp.gold = (ulong)user.gold; resp.cash = (ulong)(user.free_cash + user.pay_cash); resp.new_user = newUser; resp.dynamic_data = dynamicData; resp.deck_unit = itemManager.box.deckUnitInfo; resp.deck_info = deckInfo; resp.equipment = itemManager.box.equipment; resp.consumableItem = itemManager.box.consumableItem; resp.etcItem = itemManager.box.etcItem; resp.status = 200; return resp.ToJson(); } } public class LoginReq : Req { public string mail; public string uuid; public override bool IsReceivedAllField() { if(mail == null && uuid == null) return false; return true; } } public class LoginResp : Resp { public string uuid; public string nickname; public ulong gold; public ulong cash; public bool new_user; public List dynamic_data; public List deck_unit; public List deck_info; public List equipment; public List consumableItem; public List etcItem; } }