thewar_server/Server/Service/Login.cs

153 lines
5.6 KiB
C#

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<DynamicData> dynamicDataList = Statics.dynamicDataSQL.Select();
List<DeckInfo> 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를 얻어오기 위함.
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> { 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<LoginReq>(json);
return req;
}
private string makeResp(User user, List<DynamicData> dynamicData, List<DeckInfo> 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<DynamicData> dynamic_data;
public List<DeckUnitInfo> deck_unit;
public List<DeckInfo> deck_info;
public List<Equipment> equipment;
public List<ConsumableItem> consumableItem;
public List<EtcItem> etcItem;
}
}