From 1a1c8f5e785d31a183a51e64392c2ba7c23adf56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=8C=90=EB=8F=8C?= Date: Sat, 24 Feb 2024 23:34:05 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=ED=94=84=EB=A1=9C=ED=86=A0=EC=BD=9C=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/SQL/DynamicData.cs | 2 + Server/SQL/User.cs | 4 +- Server/Service/DeckChange.cs | 2 +- Server/Service/EquipChange.cs | 2 +- Server/Service/Login.cs | 2 +- Server/Service/NicknameChange.cs | 83 ++++++++++++++++++++++++++++++++ Server/System/Enums.cs | 3 ++ 7 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 Server/Service/NicknameChange.cs diff --git a/Server/SQL/DynamicData.cs b/Server/SQL/DynamicData.cs index 24dbb00..80d480c 100644 --- a/Server/SQL/DynamicData.cs +++ b/Server/SQL/DynamicData.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Server.SQL @@ -6,6 +7,7 @@ namespace Server.SQL [Table("dynamic_data", Schema = "gamedb")] public class DynamicData { + [Key] public long id { get; set; } public string name { get; set; } public string value { get; set; } diff --git a/Server/SQL/User.cs b/Server/SQL/User.cs index 756b50b..3326084 100644 --- a/Server/SQL/User.cs +++ b/Server/SQL/User.cs @@ -19,12 +19,14 @@ namespace Server.SQL public bool buyCash(long buy) { + if (buy == 0) { return true; } long freeCash = free_cash; long payCash = pay_cash; freeCash -= buy; if(freeCash < 0) { - payCash -= freeCash; + payCash += freeCash; + freeCash = 0; } if(payCash >= 0) diff --git a/Server/Service/DeckChange.cs b/Server/Service/DeckChange.cs index 719d310..b19b57c 100644 --- a/Server/Service/DeckChange.cs +++ b/Server/Service/DeckChange.cs @@ -8,7 +8,7 @@ namespace Server.Service { private DeckChangeReq req; - public void SaveSQL() + private void SaveSQL() { Statics.deckInfoSQL.SaveChanges(); } diff --git a/Server/Service/EquipChange.cs b/Server/Service/EquipChange.cs index 302de4f..a9e6cf9 100644 --- a/Server/Service/EquipChange.cs +++ b/Server/Service/EquipChange.cs @@ -8,7 +8,7 @@ namespace Server.Service { private EquipChangeReq req; - public void SaveSQL() + private void SaveSQL() { Statics.equipmentrSQL.SaveChanges(); Statics.deckUnitInfoSQL.SaveChanges(); diff --git a/Server/Service/Login.cs b/Server/Service/Login.cs index 04c7286..6d67e51 100644 --- a/Server/Service/Login.cs +++ b/Server/Service/Login.cs @@ -51,7 +51,7 @@ namespace Server.Service user = new User(); user.mail = req.mail; user.uuid = Guid.NewGuid().ToString(); - user.nickname = "NoName"; + user.nickname = Statics.dynamicDataSQL.SelectName("defaultNick").value; Statics.userSQL.Insert(user); //저장하고 유닛의 id를 얻어오기 위함. #endregion #region 초기 유닛 지급 diff --git a/Server/Service/NicknameChange.cs b/Server/Service/NicknameChange.cs new file mode 100644 index 0000000..175ebad --- /dev/null +++ b/Server/Service/NicknameChange.cs @@ -0,0 +1,83 @@ +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]*$"; + int buy; + + //닉네임 체크 + //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 == Statics.dynamicDataSQL.SelectName("defaultNick").value) + 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; + } +} diff --git a/Server/System/Enums.cs b/Server/System/Enums.cs index c560931..5dd54e0 100644 --- a/Server/System/Enums.cs +++ b/Server/System/Enums.cs @@ -14,6 +14,7 @@ EquipChange = 200,//장비 변경 DeckChange = 201,//덱 유닛 변경 + NicknameChange = 202,//닉네임 변경 } public enum Error @@ -23,6 +24,8 @@ public enum Error success = 200,//성공 notFound = 404,//프로토콜 없음 unknown = 500,//파라미터 오류 + errordata = 501,//잘못된 데이터 crypto = 800,//암복호화 에러 nodata = 900,//데이터가 없음 + nogold = 901,//소모재화가 없음 } \ No newline at end of file