添加DataRequestController

This commit is contained in:
milimoe 2023-07-06 23:14:24 +08:00
parent 49c2f9e065
commit d84e84d405
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 57 additions and 36 deletions

View File

@ -1,27 +1,62 @@
using System.Collections; using System.Collections;
using Milimoe.FunGame.Core.Api.Transmittal;
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.SQLScript.Common; using Milimoe.FunGame.Core.Library.SQLScript.Common;
using Milimoe.FunGame.Core.Library.SQLScript.Entity; using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Model;
using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Utility; 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;
}
/// <summary> /// <summary>
/// 接收并验证找回密码时的验证码 /// 接收并验证找回密码时的验证码
/// </summary> /// </summary>
/// <param name="RequestData"></param> /// <param name="RequestData"></param>
/// <param name="ResultData"></param> /// <param name="ResultData"></param>
private void DataRequest_ForgetPassword(Hashtable RequestData, Hashtable ResultData) public void ForgetPassword(Hashtable RequestData, Hashtable ResultData)
{ {
string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息 string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息
if (RequestData.Count >= 2) 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<string>(RequestData, ForgetVerifyCodes.Column_Username) ?? ""; string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Username) ?? "";
string email = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Email) ?? ""; string email = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Email) ?? "";
string verifycode = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? ""; string verifycode = NetworkUtility.JsonDeserializeFromHashtable<string>(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]; DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
if ((DateTime.Now - SendTime).TotalMinutes >= 10) if ((DateTime.Now - SendTime).TotalMinutes >= 10)
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期"); ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + " 验证码已过期");
msg = "此验证码已过期,请重新找回密码。"; msg = "此验证码已过期,请重新找回密码。";
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email)); SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
} }
@ -84,18 +119,18 @@ namespace Milimoe.FunGame.Server.Model
string[] To = new string[] { email }; string[] To = new string[] { email };
if (MailSender.Send(MailSender.CreateMail(Subject, Body, System.Net.Mail.MailPriority.Normal, true, To)) == MailSendResult.Success) 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 = ""; msg = "";
} }
else else
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码"); ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + " 无法发送验证码");
ServerHelper.WriteLine(MailSender.ErrorMsg); ServerHelper.WriteLine(MailSender.ErrorMsg);
} }
} }
else // 不使用MailSender的情况 else // 不使用MailSender的情况
{ {
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户"); ServerHelper.WriteLine(ServerHelper.MakeClientName(Server.ClientName, Server.User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户");
msg = ""; msg = "";
} }
} }
@ -104,7 +139,7 @@ namespace Milimoe.FunGame.Server.Model
{ {
// 发送过验证码且验证码没有过期 // 发送过验证码且验证码没有过期
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]; 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 = ""; msg = "";
} }
} }
@ -118,17 +153,17 @@ namespace Milimoe.FunGame.Server.Model
/// </summary> /// </summary>
/// <param name="RequestData"></param> /// <param name="RequestData"></param>
/// <param name="ResultData"></param> /// <param name="ResultData"></param>
private void DataRequest_UpdatePassword(Hashtable RequestData, Hashtable ResultData) private void UpdatePassword(Hashtable RequestData, Hashtable ResultData)
{ {
string msg = "无法更新您的密码,请稍后再试。"; string msg = "无法更新您的密码,请稍后再试。";
if (RequestData.Count >= 2) 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<string>(RequestData, UserQuery.Column_Username) ?? ""; string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Username) ?? "";
string password = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Password) ?? ""; string password = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Password) ?? "";
if (username.Trim() != "" && password.Trim() != "") if (username.Trim() != "" && password.Trim() != "")
{ {
SQLHelper.Execute(UserQuery.Update_Password(username, password)); Server.SQLHelper.Execute(UserQuery.Update_Password(username, password));
if (SQLHelper.Success) if (SQLHelper.Success)
{ {
// 更新成功返回空值 // 更新成功返回空值

View File

@ -57,8 +57,4 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Controllers\" />
</ItemGroup>
</Project> </Project>

View File

@ -8,6 +8,7 @@ using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.SQLScript.Common; using Milimoe.FunGame.Core.Library.SQLScript.Common;
using Milimoe.FunGame.Core.Library.SQLScript.Entity; using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Controllers;
using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Utility; using Milimoe.FunGame.Server.Utility;
@ -23,6 +24,8 @@ namespace Milimoe.FunGame.Server.Model
public Task? Task => _Task; public Task? Task => _Task;
public string ClientName => _ClientName; public string ClientName => _ClientName;
public User User => _User; public User User => _User;
public MySQLHelper SQLHelper { get; }
public MailSender? MailSender { get; }
/** /**
* Private * Private
@ -35,15 +38,13 @@ namespace Milimoe.FunGame.Server.Model
private Guid CheckLoginKey = Guid.Empty; private Guid CheckLoginKey = Guid.Empty;
private string RegVerify = ""; private string RegVerify = "";
private string ForgetVerify = "";
private int FailedTimes = 0; // 超过一定次数断开连接 private int FailedTimes = 0; // 超过一定次数断开连接
private string UserName = ""; private string UserName = "";
private DataSet DsUser = new(); private DataSet DsUser = new();
private string RoomID = ""; private string RoomID = "";
private readonly Guid Token; private readonly Guid Token;
private readonly ServerSocket Server; private readonly ServerSocket Server;
private readonly MySQLHelper SQLHelper; private readonly DataRequestController DataRequestController;
private readonly MailSender? MailSender;
private long LoginTime; private long LoginTime;
private long LogoutTime; private long LogoutTime;
@ -55,6 +56,7 @@ namespace Milimoe.FunGame.Server.Model
Token = socket.Token; Token = socket.Token;
SQLHelper = new(this); SQLHelper = new(this);
MailSender = SmtpHelper.GetMailSender(); MailSender = SmtpHelper.GetMailSender();
DataRequestController = new(this);
Config.OnlinePlayersCount++; Config.OnlinePlayersCount++;
GetUsersCount(); GetUsersCount();
} }
@ -467,7 +469,7 @@ namespace Milimoe.FunGame.Server.Model
public bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject) public bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject)
{ {
Hashtable ResultData = new(); Hashtable result = new();
DataRequestType type = DataRequestType.UnKnown; DataRequestType type = DataRequestType.UnKnown;
if (SocketObject.Parameters.Length > 0) if (SocketObject.Parameters.Length > 0)
@ -475,33 +477,21 @@ namespace Milimoe.FunGame.Server.Model
try try
{ {
type = SocketObject.GetParam<DataRequestType>(0); type = SocketObject.GetParam<DataRequestType>(0);
Hashtable RequestData = SocketObject.GetParam<Hashtable>(1) ?? new(); Hashtable data = SocketObject.GetParam<Hashtable>(1) ?? new();
SQLHelper.NewTransaction(); SQLHelper.NewTransaction();
switch (type) result = DataRequestController.GetResultData(type, data);
{
case DataRequestType.UnKnown:
break;
case DataRequestType.Login_GetFindPasswordVerifyCode:
DataRequest_ForgetPassword(RequestData, ResultData);
break;
case DataRequestType.Login_UpdatePassword:
DataRequest_UpdatePassword(RequestData, ResultData);
break;
}
SQLHelper.Commit(); SQLHelper.Commit();
} }
catch (Exception e) catch (Exception e)
{ {
ServerHelper.Error(e); ServerHelper.Error(e);
SQLHelper.Rollback(); 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) public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs)