thewar_server/Server/Service/Login.cs

94 lines
2.5 KiB
C#

using Server.System;
using Newtonsoft.Json;
using Server.SQL;
namespace Server.Service
{
public class Login : AbstractService
{
private LoginReq req;
public override string Process()
{
UserSQL userSql = new UserSQL();
User user;
if (req.uuid == null)
{
//최초 메일 로그인
//게스트 로그인은 허용하지 않고 무조건 구글로그인 혹은 마스토돈 로그인만 가능하게 처리하기
user = userSql.SelectMail(req.mail);
//현재 닉네임을 설정하는 곳이 없기에 임시 작업
user.nickname = "";
}
else
{
user = userSql.SelectUuid(req.uuid);
//현재 닉네임을 설정하는 곳이 없기에 임시 작업
user.nickname = "";
}
if(user == null)
{
#region
if(req.mail == "")
{
throw new RuntimeException("not User", Error.nodata);
}
user = new User();
user.mail = req.mail;
user.uuid = Guid.NewGuid().ToString();
user.nickname = "";
#endregion
#region ,
#endregion
}
SaveQurry(userSql, user);
return makeResp(user);
}
public void SaveQurry(UserSQL userSql, User user)
{
userSql.Insert(user);
}
public override Protocol ProtocolValue() => Protocol.Login;
public override Req Requst(string json)
{
req = JsonConvert.DeserializeObject<LoginReq>(json);
return req;
}
private string makeResp(User user)
{
LoginResp resp = new LoginResp();
resp.nickname = user.nickname;
resp.uuid = user.uuid;
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;
}
}