mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-12-05 00:06:03 +00:00
找回密码 第二部分 (#19)
This commit is contained in:
parent
ac2cf9ee67
commit
49c2f9e065
@ -170,7 +170,7 @@ bool Read(ClientSocket socket)
|
|||||||
foreach (SocketObject read in socket.ReceiveArray())
|
foreach (SocketObject read in socket.ReceiveArray())
|
||||||
{
|
{
|
||||||
SocketMessageType type = read.SocketType;
|
SocketMessageType type = read.SocketType;
|
||||||
if (type == SocketMessageType.Connect)
|
if (type == SocketMessageType.RunTime_Connect)
|
||||||
{
|
{
|
||||||
if (read.Parameters.Length > 0)
|
if (read.Parameters.Length > 0)
|
||||||
{
|
{
|
||||||
@ -190,7 +190,7 @@ bool Send(ClientSocket socket, Guid Token)
|
|||||||
{
|
{
|
||||||
// 发送消息给客户端
|
// 发送消息给客户端
|
||||||
string msg = Config.ServerName + ";" + Config.ServerNotice;
|
string msg = Config.ServerName + ";" + Config.ServerNotice;
|
||||||
if (socket.Send(SocketMessageType.Connect, msg, Token) == SocketResult.Success)
|
if (socket.Send(SocketMessageType.RunTime_Connect, msg, Token) == SocketResult.Success)
|
||||||
{
|
{
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接");
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接");
|
||||||
return true;
|
return true;
|
||||||
@ -204,7 +204,7 @@ bool SendRefuseConnect(ClientSocket socket, string msg)
|
|||||||
{
|
{
|
||||||
// 发送消息给客户端
|
// 发送消息给客户端
|
||||||
msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}";
|
msg = $"连接被拒绝,如有疑问请联系服务器管理员:{msg}";
|
||||||
if (socket.Send(SocketMessageType.Connect, msg) == SocketResult.Success)
|
if (socket.Send(SocketMessageType.RunTime_Connect, msg) == SocketResult.Success)
|
||||||
{
|
{
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接");
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(socket.ClientIP) + " <- " + "已拒绝连接");
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
142
FunGame.Server/Models/DataRequestHandler.cs
Normal file
142
FunGame.Server/Models/DataRequestHandler.cs
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
|
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.Others;
|
||||||
|
using Milimoe.FunGame.Server.Utility;
|
||||||
|
|
||||||
|
namespace Milimoe.FunGame.Server.Model
|
||||||
|
{
|
||||||
|
public partial class ServerModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 接收并验证找回密码时的验证码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="RequestData"></param>
|
||||||
|
/// <param name="ResultData"></param>
|
||||||
|
private void DataRequest_ForgetPassword(Hashtable RequestData, Hashtable ResultData)
|
||||||
|
{
|
||||||
|
string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息
|
||||||
|
if (RequestData.Count >= 2)
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> ForgetPassword");
|
||||||
|
string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Username) ?? "";
|
||||||
|
string email = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_Email) ?? "";
|
||||||
|
string verifycode = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? "";
|
||||||
|
|
||||||
|
// 客户端发来了验证码就进行验证,没有发就生成
|
||||||
|
if (verifycode.Trim() != "")
|
||||||
|
{
|
||||||
|
// 先检查验证码
|
||||||
|
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(username, email, verifycode));
|
||||||
|
if (SQLHelper.Result == SQLResult.Success)
|
||||||
|
{
|
||||||
|
// 检查验证码是否过期
|
||||||
|
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
|
||||||
|
if ((DateTime.Now - SendTime).TotalMinutes >= 10)
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期");
|
||||||
|
msg = "此验证码已过期,请重新找回密码。";
|
||||||
|
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 检查验证码是否正确
|
||||||
|
if (ForgetVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]))
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine("[ForgerPassword] UserName: " + username + " Email: " + email);
|
||||||
|
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
|
||||||
|
msg = "";
|
||||||
|
}
|
||||||
|
else msg = "验证码不正确,请重新输入!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else msg = "验证码不正确,请重新输入!";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 检查账号和邮箱是否匹配
|
||||||
|
SQLHelper.ExecuteDataSet(UserQuery.Select_CheckEmailWithUsername(username, email));
|
||||||
|
if (SQLHelper.Result != SQLResult.Success)
|
||||||
|
{
|
||||||
|
msg = "此邮箱未绑定此账号,请重试!";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 检查验证码是否发送过和是否过期
|
||||||
|
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(username, email));
|
||||||
|
if (SQLHelper.Result != SQLResult.Success || (DateTime.Now - ((DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime])).TotalMinutes >= 10)
|
||||||
|
{
|
||||||
|
// 发送验证码,需要先删除之前过期的验证码
|
||||||
|
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
|
||||||
|
ForgetVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6);
|
||||||
|
SQLHelper.Execute(ForgetVerifyCodes.Insert_ForgetVerifyCode(username, email, ForgetVerify));
|
||||||
|
if (SQLHelper.Result == SQLResult.Success)
|
||||||
|
{
|
||||||
|
if (MailSender != null)
|
||||||
|
{
|
||||||
|
// 发送验证码
|
||||||
|
string ServerName = Config.ServerName;
|
||||||
|
string Subject = $"[{ServerName}] FunGame 找回密码验证码";
|
||||||
|
string Body = $"亲爱的 {username}, <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} ,10分钟内有效,请及时输入!<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}";
|
||||||
|
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}");
|
||||||
|
msg = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码");
|
||||||
|
ServerHelper.WriteLine(MailSender.ErrorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // 不使用MailSender的情况
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户");
|
||||||
|
msg = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 发送过验证码且验证码没有过期
|
||||||
|
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode];
|
||||||
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}");
|
||||||
|
msg = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ResultData.Add("msg", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新用户的密码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="RequestData"></param>
|
||||||
|
/// <param name="ResultData"></param>
|
||||||
|
private void DataRequest_UpdatePassword(Hashtable RequestData, Hashtable ResultData)
|
||||||
|
{
|
||||||
|
string msg = "无法更新您的密码,请稍后再试。";
|
||||||
|
if (RequestData.Count >= 2)
|
||||||
|
{
|
||||||
|
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> UpdatePassword");
|
||||||
|
string username = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Username) ?? "";
|
||||||
|
string password = NetworkUtility.JsonDeserializeFromHashtable<string>(RequestData, UserQuery.Column_Password) ?? "";
|
||||||
|
if (username.Trim() != "" && password.Trim() != "")
|
||||||
|
{
|
||||||
|
SQLHelper.Execute(UserQuery.Update_Password(username, password));
|
||||||
|
if (SQLHelper.Success)
|
||||||
|
{
|
||||||
|
// 更新成功返回空值
|
||||||
|
msg = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ResultData.Add("msg", msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,7 +13,7 @@ using Milimoe.FunGame.Server.Utility;
|
|||||||
|
|
||||||
namespace Milimoe.FunGame.Server.Model
|
namespace Milimoe.FunGame.Server.Model
|
||||||
{
|
{
|
||||||
public class ServerModel : IServerModel
|
public partial class ServerModel : IServerModel
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Public
|
* Public
|
||||||
@ -71,7 +71,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
string msg = "";
|
string msg = "";
|
||||||
|
|
||||||
// 验证Token
|
// 验证Token
|
||||||
if (type != SocketMessageType.HeartBeat && token != Token)
|
if (type != SocketMessageType.RunTime_HeartBeat && token != Token)
|
||||||
{
|
{
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] ");
|
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 使用了非法方式传输消息,服务器拒绝回应 -> [" + ServerSocket.GetTypeString(type) + "] ");
|
||||||
return false;
|
return false;
|
||||||
@ -83,8 +83,8 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 如果不等于这些Type,就不会输出一行记录。这些Type有特定的输出。
|
// 如果不等于这些Type,就不会输出一行记录。这些Type有特定的输出。
|
||||||
SocketMessageType[] IgnoreType = new SocketMessageType[] { SocketMessageType.HeartBeat, SocketMessageType.Login, SocketMessageType.IntoRoom,
|
SocketMessageType[] IgnoreType = new SocketMessageType[] { SocketMessageType.RunTime_HeartBeat, SocketMessageType.RunTime_Login, SocketMessageType.Main_IntoRoom,
|
||||||
SocketMessageType.Chat};
|
SocketMessageType.Main_Chat};
|
||||||
if (!IgnoreType.Contains(type))
|
if (!IgnoreType.Contains(type))
|
||||||
{
|
{
|
||||||
if (msg.Trim() == "")
|
if (msg.Trim() == "")
|
||||||
@ -95,11 +95,11 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case SocketMessageType.GetNotice:
|
case SocketMessageType.Main_GetNotice:
|
||||||
msg = Config.ServerNotice;
|
msg = Config.ServerNotice;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.Login:
|
case SocketMessageType.RunTime_Login:
|
||||||
CheckLoginKey = Guid.Empty;
|
CheckLoginKey = Guid.Empty;
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
@ -138,7 +138,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
return Send(socket, type, CheckLoginKey, msg);
|
return Send(socket, type, CheckLoginKey, msg);
|
||||||
|
|
||||||
case SocketMessageType.CheckLogin:
|
case SocketMessageType.RunTime_CheckLogin:
|
||||||
if (args != null && args.Length > 0)
|
if (args != null && args.Length > 0)
|
||||||
{
|
{
|
||||||
Guid checkloginkey = SocketObject.GetParam<Guid>(0);
|
Guid checkloginkey = SocketObject.GetParam<Guid>(0);
|
||||||
@ -160,7 +160,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
return Send(socket, type, CheckLoginKey.ToString());
|
return Send(socket, type, CheckLoginKey.ToString());
|
||||||
|
|
||||||
case SocketMessageType.Logout:
|
case SocketMessageType.RunTime_Logout:
|
||||||
Guid checklogoutkey = Guid.Empty;
|
Guid checklogoutkey = Guid.Empty;
|
||||||
if (args != null && args.Length > 0)
|
if (args != null && args.Length > 0)
|
||||||
{
|
{
|
||||||
@ -178,15 +178,15 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
ServerHelper.WriteLine("客户端发送了错误的秘钥,不允许本次登出。");
|
ServerHelper.WriteLine("客户端发送了错误的秘钥,不允许本次登出。");
|
||||||
return Send(socket, type, checklogoutkey);
|
return Send(socket, type, checklogoutkey);
|
||||||
|
|
||||||
case SocketMessageType.Disconnect:
|
case SocketMessageType.RunTime_Disconnect:
|
||||||
msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 ";
|
msg = "你已成功断开与服务器的连接: " + Config.ServerName + "。 ";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.HeartBeat:
|
case SocketMessageType.RunTime_HeartBeat:
|
||||||
msg = "";
|
msg = "";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.IntoRoom:
|
case SocketMessageType.Main_IntoRoom:
|
||||||
msg = "-1";
|
msg = "-1";
|
||||||
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
|
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
|
||||||
RoomID = msg;
|
RoomID = msg;
|
||||||
@ -200,14 +200,14 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
if (Client != null && User.Id != 0)
|
if (Client != null && User.Id != 0)
|
||||||
{
|
{
|
||||||
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 进入了房间。");
|
Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 进入了房间。");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.Chat:
|
case SocketMessageType.Main_Chat:
|
||||||
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
|
if (args != null && args.Length > 0) msg = SocketObject.GetParam<string>(0)!;
|
||||||
ServerHelper.WriteLine(msg);
|
ServerHelper.WriteLine(msg);
|
||||||
foreach (ServerModel Client in Server.GetUsersList.Cast<ServerModel>())
|
foreach (ServerModel Client in Server.GetUsersList.Cast<ServerModel>())
|
||||||
@ -216,13 +216,13 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
if (Client != null && User.Id != 0)
|
if (Client != null && User.Id != 0)
|
||||||
{
|
{
|
||||||
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + msg);
|
Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case SocketMessageType.Reg:
|
case SocketMessageType.RunTime_Reg:
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
string? username = "", email = "";
|
string? username = "", email = "";
|
||||||
@ -289,7 +289,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case SocketMessageType.CheckReg:
|
case SocketMessageType.RunTime_CheckReg:
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
string? username = "", password = "", email = "", verifycode = "";
|
string? username = "", password = "", email = "", verifycode = "";
|
||||||
@ -340,7 +340,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
else msg = "注册失败!";
|
else msg = "注册失败!";
|
||||||
return Send(socket, type, false, msg);
|
return Send(socket, type, false, msg);
|
||||||
|
|
||||||
case SocketMessageType.UpdateRoom:
|
case SocketMessageType.Main_UpdateRoom:
|
||||||
Config.RoomList ??= new();
|
Config.RoomList ??= new();
|
||||||
Config.RoomList.Clear();
|
Config.RoomList.Clear();
|
||||||
DataSet DsRoomTemp = new(), DsUserTemp = new();
|
DataSet DsRoomTemp = new(), DsUserTemp = new();
|
||||||
@ -350,7 +350,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
Config.RoomList.AddRooms(rooms); // 更新服务器中的房间列表
|
Config.RoomList.AddRooms(rooms); // 更新服务器中的房间列表
|
||||||
return Send(socket, type, rooms); // 传RoomList
|
return Send(socket, type, rooms); // 传RoomList
|
||||||
|
|
||||||
case SocketMessageType.CreateRoom:
|
case SocketMessageType.Main_CreateRoom:
|
||||||
msg = "-1";
|
msg = "-1";
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
@ -368,7 +368,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
GameMode.GameMode_Team => RoomType.Team,
|
GameMode.GameMode_Team => RoomType.Team,
|
||||||
GameMode.GameMode_MixHasPass => RoomType.MixHasPass,
|
GameMode.GameMode_MixHasPass => RoomType.MixHasPass,
|
||||||
GameMode.GameMode_TeamHasPass => RoomType.TeamHasPass,
|
GameMode.GameMode_TeamHasPass => RoomType.TeamHasPass,
|
||||||
_ => RoomType.None
|
_ => RoomType.All
|
||||||
};
|
};
|
||||||
string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper();
|
string roomid = Verification.CreateVerifyCode(VerifyCodeType.MixVerifyCode, 7).ToUpper();
|
||||||
SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, userid, roomtype, password ?? ""));
|
SQLHelper.Execute(RoomQuery.Insert_CreateRoom(roomid, userid, roomtype, password ?? ""));
|
||||||
@ -380,7 +380,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.QuitRoom:
|
case SocketMessageType.Main_QuitRoom:
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
string? roomid = "";
|
string? roomid = "";
|
||||||
@ -422,10 +422,10 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
if (Client != null && User.Id != 0)
|
if (Client != null && User.Id != 0)
|
||||||
{
|
{
|
||||||
Client.Send(Client.Socket!, SocketMessageType.Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 离开了房间。");
|
Client.Send(Client.Socket!, SocketMessageType.Main_Chat, User.Username, DateTimeUtility.GetNowShortTime() + " [ " + User.Username + " ] 离开了房间。");
|
||||||
if (UpdateRoomMaster.Id != 0 && Room.Roomid != "-1")
|
if (UpdateRoomMaster.Id != 0 && Room.Roomid != "-1")
|
||||||
{
|
{
|
||||||
Client.Send(Client.Socket!, SocketMessageType.UpdateRoomMaster, User, Room);
|
Client.Send(Client.Socket!, SocketMessageType.Room_UpdateRoomMaster, User, Room);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -436,13 +436,13 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
return Send(socket, type, false);
|
return Send(socket, type, false);
|
||||||
|
|
||||||
case SocketMessageType.MatchRoom:
|
case SocketMessageType.Main_MatchRoom:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.ChangeRoomSetting:
|
case SocketMessageType.Room_ChangeRoomSetting:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.GetRoomPlayerCount:
|
case SocketMessageType.Room_GetRoomPlayerCount:
|
||||||
if (args != null)
|
if (args != null)
|
||||||
{
|
{
|
||||||
string? roomid = "-1";
|
string? roomid = "-1";
|
||||||
@ -465,6 +465,45 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject)
|
||||||
|
{
|
||||||
|
Hashtable ResultData = new();
|
||||||
|
DataRequestType type = DataRequestType.UnKnown;
|
||||||
|
|
||||||
|
if (SocketObject.Parameters.Length > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
type = SocketObject.GetParam<DataRequestType>(0);
|
||||||
|
Hashtable RequestData = SocketObject.GetParam<Hashtable>(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;
|
||||||
|
}
|
||||||
|
SQLHelper.Commit();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ServerHelper.Error(e);
|
||||||
|
SQLHelper.Rollback();
|
||||||
|
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs)
|
public bool Send(ClientSocket socket, SocketMessageType type, params object[] objs)
|
||||||
{
|
{
|
||||||
// 发送消息给客户端
|
// 发送消息给客户端
|
||||||
@ -474,14 +513,14 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case SocketMessageType.Logout:
|
case SocketMessageType.RunTime_Logout:
|
||||||
RemoveUser();
|
RemoveUser();
|
||||||
break;
|
break;
|
||||||
case SocketMessageType.Disconnect:
|
case SocketMessageType.RunTime_Disconnect:
|
||||||
RemoveUser();
|
RemoveUser();
|
||||||
Close();
|
Close();
|
||||||
break;
|
break;
|
||||||
case SocketMessageType.Chat:
|
case SocketMessageType.Main_Chat:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
object obj = objs[0];
|
object obj = objs[0];
|
||||||
@ -498,7 +537,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
Task StreamReader = Task.Factory.StartNew(CreateStreamReader);
|
Task StreamReader = Task.Factory.StartNew(CreateStreamReader);
|
||||||
@ -511,128 +550,6 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
_ClientName = ClientName;
|
_ClientName = ClientName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool DataRequestHandler(ClientSocket socket, SocketObject SocketObject)
|
|
||||||
{
|
|
||||||
Hashtable RequestData = new();
|
|
||||||
Hashtable ResultData = new();
|
|
||||||
DataRequestType type = DataRequestType.UnKnown;
|
|
||||||
|
|
||||||
if (SocketObject.Parameters.Length > 0)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
type = SocketObject.GetParam<DataRequestType>(0);
|
|
||||||
RequestData = SocketObject.GetParam<Hashtable>(1) ?? new();
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case DataRequestType.UnKnown:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DataRequestType.GetFindPasswordVerifyCode:
|
|
||||||
if (RequestData.Count >= 2)
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(SocketMessageType.DataRequest) + "] " + ServerHelper.MakeClientName(ClientName, User) + " -> ForgetPassword");
|
|
||||||
string username = (string?)(RequestData[ForgetVerifyCodes.Column_Username]) ?? "";
|
|
||||||
string email = (string?)(RequestData[ForgetVerifyCodes.Column_Email]) ?? "";
|
|
||||||
string verifycode = (string?)RequestData[ForgetVerifyCodes.Column_ForgetVerifyCode] ?? "";
|
|
||||||
string msg = ""; // 返回错误信息
|
|
||||||
// 客户端发来了验证码就进行验证,没有发就生成
|
|
||||||
if (verifycode.Trim() != "")
|
|
||||||
{
|
|
||||||
// 先检查验证码
|
|
||||||
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(username, email, verifycode));
|
|
||||||
if (SQLHelper.Result == SQLResult.Success)
|
|
||||||
{
|
|
||||||
// 检查验证码是否过期
|
|
||||||
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
|
|
||||||
if ((DateTime.Now - SendTime).TotalMinutes >= 10)
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 验证码已过期");
|
|
||||||
msg = "此验证码已过期,请重新找回密码。";
|
|
||||||
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 找回密码
|
|
||||||
if (ForgetVerify.Equals(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]))
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine("[ForgerPassword] UserName: " + username + " Email: " + email);
|
|
||||||
// TODO. 等更新UpdatePassword
|
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
//msg = "找回密码!请牢记您的新密码!";
|
|
||||||
//SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email), out _);
|
|
||||||
}
|
|
||||||
//else msg = "服务器无法处理您的注册,注册失败!";
|
|
||||||
}
|
|
||||||
else msg = "验证码不正确,请重新输入!";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else msg = "无法找回您的密码,请稍后再试。";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 检查验证码是否发送过
|
|
||||||
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(username, email));
|
|
||||||
if (SQLHelper.Result == SQLResult.Success)
|
|
||||||
{
|
|
||||||
DateTime SendTime = (DateTime)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime];
|
|
||||||
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode];
|
|
||||||
if ((DateTime.Now - SendTime).TotalMinutes < 10)
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 发送验证码,需要先删除之前过期的验证码
|
|
||||||
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(username, email));
|
|
||||||
ForgetVerify = Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 6);
|
|
||||||
SQLHelper.Execute(ForgetVerifyCodes.Insert_ForgetVerifyCode(username, email, ForgetVerify));
|
|
||||||
if (SQLHelper.Result == SQLResult.Success)
|
|
||||||
{
|
|
||||||
if (MailSender != null)
|
|
||||||
{
|
|
||||||
// 发送验证码
|
|
||||||
string ServerName = Config.ServerName;
|
|
||||||
string Subject = $"[{ServerName}] FunGame 找回密码验证码";
|
|
||||||
string Body = $"亲爱的 {username}, <br/> 您正在找回[{ServerName}]账号的密码,您的验证码是 {ForgetVerify} ,10分钟内有效,请及时输入!<br/><br/>{ServerName}<br/>{DateTimeUtility.GetDateTimeToString(TimeType.DateOnly)}";
|
|
||||||
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}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + " 无法发送验证码");
|
|
||||||
ServerHelper.WriteLine(MailSender.ErrorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // 不使用MailSender的情况
|
|
||||||
{
|
|
||||||
ServerHelper.WriteLine(ServerHelper.MakeClientName(ClientName, User) + $" 验证码为:{ForgetVerify},请服务器管理员告知此用户");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else msg = "无法找回您的密码,请稍后再试。";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else msg = "无法找回您的密码,请稍后再试。";
|
|
||||||
}
|
|
||||||
ResultData.Add("msg", msg);
|
|
||||||
}
|
|
||||||
else ResultData.Add("msg", "无法找回您的密码,请稍后再试。");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
ServerHelper.Error(e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Send(socket, SocketMessageType.DataRequest, type, ResultData);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void KickUser()
|
private void KickUser()
|
||||||
{
|
{
|
||||||
if (User.Id != 0)
|
if (User.Id != 0)
|
||||||
@ -642,7 +559,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + user + " 重复登录!");
|
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + user + " 重复登录!");
|
||||||
ServerModel serverTask = (ServerModel)Server.GetUser(user);
|
ServerModel serverTask = (ServerModel)Server.GetUser(user);
|
||||||
serverTask?.Send(serverTask.Socket!, SocketMessageType.ForceLogout, serverTask.CheckLoginKey, "您的账号在别处登录,已强制下线。");
|
serverTask?.Send(serverTask.Socket!, SocketMessageType.RunTime_ForceLogout, serverTask.CheckLoginKey, "您的账号在别处登录,已强制下线。");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
7
FunGame.Server/Models/SocketMessageHandler.cs
Normal file
7
FunGame.Server/Models/SocketMessageHandler.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace Milimoe.FunGame.Server.Model
|
||||||
|
{
|
||||||
|
public partial class ServerModel
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user