thewar_server/Server/Service/NicknameChange.cs

93 lines
2.7 KiB
C#

using Server.System;
using Newtonsoft.Json;
using Server.SQL;
using System.Text.RegularExpressions;
namespace Server.Service
{
public class NicknameChange : AbstractService
{
private NicknameChangeReq req;
private void SaveSQL()
{
Statics.userSQL.SaveChanges();
}
public override string Process()
{
User user = Statics.userSQL.SelectUuid(req.uuid);
string newNickname = req.newNickname;
string regular = @"^[가-힣a-zA-Z0-9\s]*$";
string defaultNick = Statics.dynamicDataSQL.SelectName("defaultNick").value;
int buy;
//만약 시스템 설정과 같은 닉네임이 온다면 중복 처리
if (newNickname == defaultNick)
{
throw new RuntimeException("Duplicate nickname", Error.errordata);
}
//닉네임 체크
if (!Regex.IsMatch(newNickname, regular) || (newNickname.Length < 2 || newNickname.Length > 16) || user.nickname == newNickname)
{
//해당 데이터가 들어온다면 유저 정보와 같이 로그를 남기게 만들것
throw new RuntimeException("Nickname not allowed", Error.errordata);
}
//가격 체크
if (user.nickname == defaultNick)
buy = 0;
else
buy = int.Parse(Statics.dynamicDataSQL.SelectName("nicknameCash").value);
//현재 충분한 제화가 있는지 확인
if (!user.buyCash(buy))
{
throw new RuntimeException("Cache shortage", Error.nogold);
}
//닉네임 중복 검사
user.nickname = newNickname;
return makeResp(user);
}
public override Protocol ProtocolValue() => Protocol.NicknameChange;
public override Req Requst(string json)
{
req = JsonConvert.DeserializeObject<NicknameChangeReq>(json);
return req;
}
private string makeResp(User user)
{
SaveSQL();
NicknameChangeResp resp = new NicknameChangeResp();
resp.status = 200;
resp.nickname = user.nickname;
resp.cash = (ulong)(user.free_cash + user.pay_cash);
return resp.ToJson();
}
}
public class NicknameChangeReq : Req
{
public string uuid;
public string newNickname;
public override bool IsReceivedAllField()
{
if (uuid == "")
return false;
return true;
}
}
public class NicknameChangeResp : Resp
{
public string nickname;
public ulong cash;
}
}