diff --git a/FunGame.Server/Models/DataRequestHandler.cs b/FunGame.Server/Controllers/DataRequestController.cs similarity index 79% rename from FunGame.Server/Models/DataRequestHandler.cs rename to FunGame.Server/Controllers/DataRequestController.cs index 17f82db..da853a9 100644 --- a/FunGame.Server/Models/DataRequestHandler.cs +++ b/FunGame.Server/Controllers/DataRequestController.cs @@ -1,27 +1,62 @@ using System.Collections; +using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.SQLScript.Common; using Milimoe.FunGame.Core.Library.SQLScript.Entity; +using Milimoe.FunGame.Server.Model; using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Utility; -namespace Milimoe.FunGame.Server.Model +namespace Milimoe.FunGame.Server.Controllers { - public partial class ServerModel + public class DataRequestController { + public ServerModel Server { get; } + public MySQLHelper SQLHelper => Server.SQLHelper; + public MailSender? MailSender => Server.MailSender; + + private string ForgetVerify = ""; + + public DataRequestController(ServerModel server) + { + Server = server; + } + + public Hashtable GetResultData(DataRequestType type, Hashtable data) + { + Hashtable result = new(); + + switch (type) + { + case DataRequestType.UnKnown: + break; + + case DataRequestType.Login_GetFindPasswordVerifyCode: + ForgetPassword(data, result); + break; + + case DataRequestType.Login_UpdatePassword: + UpdatePassword(data, result); + break; + } + + return result; + } + /// /// 接收并验证找回密码时的验证码 /// /// /// - private void DataRequest_ForgetPassword(Hashtable RequestData, Hashtable ResultData) + public void ForgetPassword(Hashtable RequestData, Hashtable ResultData) { string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息 if (RequestData.Count >= 2) { - ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> ForgetPassword"); + ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(Server.ClientName, Server.User) + " -> ForgetPassword"); string username = NetworkUtility.JsonDeserializeFromHashtable(RequestData, ForgetVerifyCodes.Column_Username) ?? ""; string email = NetworkUtility.JsonDeserializeFromHashtable(RequestData, ForgetVerifyCodes.Column_Email) ?? ""; string verifycode = NetworkUtility.JsonDeserializeFromHashtable(RequestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? ""; @@ -37,7 +72,7 @@ namespace Milimoe.FunGame.Server.Model DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime]; if ((DateTime.Now - SendTime).TotalMinutes >= 10) { - ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期"); + ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + " 验证码已过期"); msg = "此验证码已过期,请重新找回密码。"; SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email)); } @@ -84,18 +119,18 @@ namespace Milimoe.FunGame.Server.Model string[] To = new string[] { email }; if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success) { - ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 已向{email}发送验证码:{ForgetVerify}"); + ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + $" 已向{email}发送验证码:{ForgetVerify}"); msg = ""; } else { - ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码"); + ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + " 无法发送验证码"); ServerHelper.WriteLine(MailSender.ErrorMsg); } } else // 不使用MailSender的情况 { - ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户"); + ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户"); msg = ""; } } @@ -104,7 +139,7 @@ namespace Milimoe.FunGame.Server.Model { // 发送过验证码且验证码没有过期 string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]; - ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}"); + ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}"); msg = ""; } } @@ -118,17 +153,17 @@ namespace Milimoe.FunGame.Server.Model /// /// /// - private void DataRequest_UpdatePassword(Hashtable RequestData, Hashtable ResultData) + private void UpdatePassword(Hashtable RequestData, Hashtable ResultData) { string msg = "无法更新您的密码,请稍后再试。"; if (RequestData.Count >= 2) { - ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> UpdatePassword"); + ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(Server.ClientName, Server.User) + " -> UpdatePassword"); string username = NetworkUtility.JsonDeserializeFromHashtable(RequestData, UserQuery.Column_Username) ?? ""; string password = NetworkUtility.JsonDeserializeFromHashtable(RequestData, UserQuery.Column_Password) ?? ""; if (username.Trim() != "" && password.Trim() != "") { - SQLHelper.Execute(UserQuery.Update_Password(username, password)); + Server.SQLHelper.Execute(UserQuery.Update_Password(username, password)); if (SQLHelper.Success) { // 更新成功返回空值 diff --git a/FunGame.Server/FunGame.Server.csproj b/FunGame.Server/FunGame.Server.csproj index 51ccca8..838d5d3 100644 --- a/FunGame.Server/FunGame.Server.csproj +++ b/FunGame.Server/FunGame.Server.csproj @@ -57,8 +57,4 @@ - - - - diff --git a/FunGame.Server/Models/ServerModel.cs b/FunGame.Server/Models/ServerModel.cs index f231ac6..5787d43 100644 --- a/FunGame.Server/Models/ServerModel.cs +++ b/FunGame.Server/Models/ServerModel.cs @@ -8,6 +8,7 @@ using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.SQLScript.Common; using Milimoe.FunGame.Core.Library.SQLScript.Entity; +using Milimoe.FunGame.Server.Controllers; using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Utility; @@ -23,6 +24,8 @@ namespace Milimoe.FunGame.Server.Model public Task? Task => _Task; public string ClientName => _ClientName; public User User => _User; + public MySQLHelper SQLHelper { get; } + public MailSender? MailSender { get; } /** * Private @@ -35,15 +38,13 @@ namespace Milimoe.FunGame.Server.Model private Guid CheckLoginKey = Guid.Empty; private string RegVerify = ""; - private string ForgetVerify = ""; private int FailedTimes = 0; // 超过一定次数断开连接 private string UserName = ""; private DataSet DsUser = new(); private string RoomID = ""; private readonly Guid Token; private readonly ServerSocket Server; - private readonly MySQLHelper SQLHelper; - private readonly MailSender? MailSender; + private readonly DataRequestController DataRequestController; private long LoginTime; private long LogoutTime; @@ -55,6 +56,7 @@ namespace Milimoe.FunGame.Server.Model Token = socket.Token; SQLHelper = new(this); MailSender = SmtpHelper.GetMailSender(); + DataRequestController = new(this); Config.OnlinePlayersCount++; GetUsersCount(); } @@ -467,7 +469,7 @@ namespace Milimoe.FunGame.Server.Model public bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject) { - Hashtable ResultData = new(); + Hashtable result = new(); DataRequestType type = DataRequestType.UnKnown; if (SocketObject.Parameters.Length > 0) @@ -475,33 +477,21 @@ namespace Milimoe.FunGame.Server.Model try { type = SocketObject.GetParam(0); - Hashtable RequestData = SocketObject.GetParam(1) ?? new(); + Hashtable data = SocketObject.GetParam(1) ?? new(); SQLHelper.NewTransaction(); - switch (type) - { - case DataRequestType.UnKnown: - break; - - case DataRequestType.Login_GetFindPasswordVerifyCode: - DataRequest_ForgetPassword(RequestData, ResultData); - break; - - case DataRequestType.Login_UpdatePassword: - DataRequest_UpdatePassword(RequestData, ResultData); - break; - } + result = DataRequestController.GetResultData(type, data); SQLHelper.Commit(); } catch (Exception e) { ServerHelper.Error(e); SQLHelper.Rollback(); - return Send(socket, SocketMessageType.DataRequest, type, ResultData); + return Send(socket, SocketMessageType.DataRequest, type, result); } } - return Send(socket, SocketMessageType.DataRequest, type, ResultData); + return Send(socket, SocketMessageType.DataRequest, type, result); } public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs)