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; SaveSQL(); return makeResp(user); } public override Protocol ProtocolValue() => Protocol.NicknameChange; public override Req Requst(string json) { req = JsonConvert.DeserializeObject(json); return req; } private string makeResp(User user) { 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; } }