删除DataRequestHandler中强制的SQL事务

This commit is contained in:
milimoe 2023-12-13 22:43:04 +08:00
parent 359159b58a
commit 9e64b854aa
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 31 additions and 16 deletions

View File

@ -489,26 +489,28 @@ namespace Milimoe.FunGame.Server.Controller
else else
{ {
// 发送验证码,需要先删除之前过期的验证码 // 发送验证码,需要先删除之前过期的验证码
SQLHelper.NewTransaction();
SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email)); SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email));
RegVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6); RegVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6);
SQLHelper.Execute(RegVerifyCodes.Insert_RegVerifyCode(username, email, RegVerify)); SQLHelper.Execute(RegVerifyCodes.Insert_RegVerifyCode(username, email, RegVerify));
if (SQLHelper.Result == SQLResult.Success) if (SQLHelper.Result == SQLResult.Success)
{ {
SQLHelper.Commit();
if (MailSender != null) if (MailSender != null)
{ {
// 发送验证码 // 发送验证码
string ServerName = Config.ServerName; string ServerName = Config.ServerName;
string Subject = $"[{ServerName}] FunGame 注册验证码"; string Subject = $"[{ServerName}] FunGame 注册验证码";
string Body = $"亲爱的 {username} <br/> 感谢您注册[{ServerName}],您的验证码是 {RegVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}"; string Body = $"亲爱的 {username} <br/> 感谢您注册[{ServerName}],您的验证码是 {RegVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.LongDateOnly)}";
string[] To = new string[] { email }; string[] To = [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(Server.GetClientName() + $" 已向{email}发送验证码:{RegVerify}"); ServerHelper.WriteLine(Server.GetClientName() + $" 已向{email}发送验证码:{RegVerify}");
} }
else else
{ {
ServerHelper.WriteLine(Server.GetClientName() + " 无法发送验证码"); ServerHelper.WriteLine(Server.GetClientName() + " 无法发送验证码", InvokeMessageType.Error);
ServerHelper.WriteLine(MailSender.ErrorMsg); ServerHelper.WriteLine(MailSender.ErrorMsg, InvokeMessageType.Error);
} }
} }
else // 不使用MailSender的情况 else // 不使用MailSender的情况
@ -517,6 +519,7 @@ namespace Milimoe.FunGame.Server.Controller
} }
returnType = RegInvokeType.InputVerifyCode; returnType = RegInvokeType.InputVerifyCode;
} }
else SQLHelper.Rollback();
} }
} }
} }
@ -540,6 +543,7 @@ namespace Milimoe.FunGame.Server.Controller
// 注册 // 注册
if (RegVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegVerifyCode])) if (RegVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][RegVerifyCodes.Column_RegVerifyCode]))
{ {
SQLHelper.NewTransaction();
ServerHelper.WriteLine("[Reg] UserName: " + username + " Email: " + email); ServerHelper.WriteLine("[Reg] UserName: " + username + " Email: " + email);
SQLHelper.Execute(UserQuery.Insert_Register(username, password, email, Server.Socket?.ClientIP ?? "")); SQLHelper.Execute(UserQuery.Insert_Register(username, password, email, Server.Socket?.ClientIP ?? ""));
if (SQLHelper.Result == SQLResult.Success) if (SQLHelper.Result == SQLResult.Success)
@ -547,9 +551,11 @@ namespace Milimoe.FunGame.Server.Controller
success = true; success = true;
msg = "注册成功!请牢记您的账号与密码!"; msg = "注册成功!请牢记您的账号与密码!";
SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email)); SQLHelper.Execute(RegVerifyCodes.Delete_RegVerifyCode(username, email));
SQLHelper.Commit();
} }
else else
{ {
SQLHelper.Rollback();
msg = "服务器无法处理您的注册,注册失败!"; msg = "服务器无法处理您的注册,注册失败!";
} }
} }
@ -704,8 +710,8 @@ namespace Milimoe.FunGame.Server.Controller
// 发送验证码 // 发送验证码
string ServerName = Config.ServerName; string ServerName = Config.ServerName;
string Subject = $"[{ServerName}] FunGame 找回密码验证码"; string Subject = $"[{ServerName}] FunGame 找回密码验证码";
string Body = $"亲爱的 {username} <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}"; string Body = $"亲爱的 {username} <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} 10分钟内有效请及时输入<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.LongDateOnly)}";
string[] To = new string[] { email }; string[] To = [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(Server.GetClientName() + $" 已向{email}发送验证码:{ForgetVerify}"); ServerHelper.WriteLine(Server.GetClientName() + $" 已向{email}发送验证码:{ForgetVerify}");

View File

@ -224,7 +224,7 @@ bool Connect(ClientSocket socket, Guid token, string clientip, ref bool isDebugM
return false; return false;
} }
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(read.SocketType) + "] " + ServerHelper.MakeClientName(socket.ClientIP), InvokeMessageType.Core); ServerHelper.WriteLine("[" + SocketSet.GetTypeString(read.SocketType) + "] " + ServerHelper.MakeClientName(socket.ClientIP), InvokeMessageType.Core);
// 读取参数 // 读取参数
// 参数1客户端的游戏模组列表没有服务器的需要拒绝 // 参数1客户端的游戏模组列表没有服务器的需要拒绝

View File

@ -83,7 +83,7 @@ namespace Milimoe.FunGame.Server.Model
// 验证Token // 验证Token
if (type != SocketMessageType.HeartBeat && token != Token) if (type != SocketMessageType.HeartBeat && token != Token)
{ {
ServerHelper.WriteLine(GetClientName() + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] "); ServerHelper.WriteLine(GetClientName() + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + SocketSet.GetTypeString(type) + "] ");
return false; return false;
} }
@ -111,7 +111,7 @@ namespace Milimoe.FunGame.Server.Model
switch (type) switch (type)
{ {
case SocketMessageType.Disconnect: case SocketMessageType.Disconnect:
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + GetClientName() + " -> Disconnect", InvokeMessageType.Core); ServerHelper.WriteLine("[" + SocketSet.GetTypeString(SocketMessageType.DataRequest) + "] " + GetClientName() + " -> Disconnect", InvokeMessageType.Core);
msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 "; msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 ";
break; break;
} }
@ -139,9 +139,7 @@ namespace Milimoe.FunGame.Server.Model
type = SocketObject.GetParam<DataRequestType>(0); type = SocketObject.GetParam<DataRequestType>(0);
Hashtable data = SocketObject.GetParam<Hashtable>(1) ?? []; Hashtable data = SocketObject.GetParam<Hashtable>(1) ?? [];
SQLHelper.NewTransaction();
result = DataRequestController.GetResultData(type, data); result = DataRequestController.GetResultData(type, data);
SQLHelper.Commit();
} }
catch (Exception e) catch (Exception e)
{ {
@ -207,7 +205,7 @@ namespace Milimoe.FunGame.Server.Model
} }
object obj = objs[0]; object obj = objs[0];
if (obj.GetType() == typeof(string) && (string)obj != "") if (obj.GetType() == typeof(string) && (string)obj != "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + GetClientName() + " <- " + obj, InvokeMessageType.Core); ServerHelper.WriteLine("[" + SocketSet.GetTypeString(type) + "] " + GetClientName() + " <- " + obj, InvokeMessageType.Core);
return true; return true;
} }
throw new CanNotSendToClientException(); throw new CanNotSendToClientException();
@ -565,7 +563,7 @@ namespace Milimoe.FunGame.Server.Model
private void CreateStreamReader() private void CreateStreamReader()
{ {
Thread.Sleep(100); Thread.Sleep(20);
ServerHelper.WriteLine("Creating: StreamReader -> " + GetClientName() + " ...OK"); ServerHelper.WriteLine("Creating: StreamReader -> " + GetClientName() + " ...OK");
while (Running) while (Running)
{ {
@ -598,14 +596,25 @@ namespace Milimoe.FunGame.Server.Model
private void CreatePeriodicalQuerier() private void CreatePeriodicalQuerier()
{ {
Thread.Sleep(100); Thread.Sleep(20);
ServerHelper.WriteLine("Creating: PeriodicalQuerier -> " + GetClientName() + " ...OK"); ServerHelper.WriteLine("Creating: PeriodicalQuerier -> " + GetClientName() + " ...OK");
while (Running) while (Running)
{ {
// 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线 // 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线
try
{
Thread.Sleep(2 * 1000 * 3600); Thread.Sleep(2 * 1000 * 3600);
SQLHelper?.ExecuteDataSet(UserQuery.Select_IsExistUsername(UserName)); SQLHelper?.ExecuteDataSet(UserQuery.Select_IsExistUsername(UserName));
} }
catch (Exception e)
{
ServerHelper.Error(e);
RemoveUser();
Close();
ServerHelper.WriteLine(GetClientName() + " Error -> Socket is Closed.");
ServerHelper.WriteLine(GetClientName() + " Close -> StringStream is Closed.");
}
}
} }
private void Close() private void Close()