From a01f0adc7be5be74c5060a1cfb79197284984bd8 Mon Sep 17 00:00:00 2001 From: milimoe <110188673+milimoe@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:31:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=BE=E5=9B=9E=E5=AF=86=E7=A0=81=20?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E9=83=A8=E5=88=86=20(#14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FunGame.Desktop/Controller/LoginController.cs | 4 + FunGame.Desktop/Library/Config/RunTime.cs | 1 - FunGame.Desktop/Model/LoginModel.cs | 75 +++++++++++- FunGame.Desktop/Model/MainModel.cs | 26 ++-- FunGame.Desktop/Model/RegisterModel.cs | 6 +- FunGame.Desktop/Model/RunTimeModel.cs | 4 +- FunGame.Desktop/UI/Login/ForgetPassword.cs | 115 +++++++++--------- FunGame.Desktop/UI/Login/Login.cs | 1 + FunGame.Desktop/UI/Main/Main.Designer.cs | 6 +- FunGame.Desktop/UI/Main/Main.cs | 8 +- 10 files changed, 160 insertions(+), 86 deletions(-) diff --git a/FunGame.Desktop/Controller/LoginController.cs b/FunGame.Desktop/Controller/LoginController.cs index 2ca0ee9..757fdb3 100644 --- a/FunGame.Desktop/Controller/LoginController.cs +++ b/FunGame.Desktop/Controller/LoginController.cs @@ -42,5 +42,9 @@ namespace Milimoe.FunGame.Desktop.Controller return result; } + + public static string ForgetPassword_CheckVerifyCode(string username, string email, string verifycode = "") => LoginModel.ForgetPassword_CheckVerifyCode(username, email, verifycode); + + public static string ForgetPassword_UpdatePassword(string username, string password) => LoginModel.ForgetPassword_UpdatePassword(username, password); } } diff --git a/FunGame.Desktop/Library/Config/RunTime.cs b/FunGame.Desktop/Library/Config/RunTime.cs index ec02e0f..b0a05bf 100644 --- a/FunGame.Desktop/Library/Config/RunTime.cs +++ b/FunGame.Desktop/Library/Config/RunTime.cs @@ -1,6 +1,5 @@ using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Library.Constant; -using Milimoe.FunGame.Desktop.Model; namespace Milimoe.FunGame.Desktop.Library { diff --git a/FunGame.Desktop/Model/LoginModel.cs b/FunGame.Desktop/Model/LoginModel.cs index e498387..0ec7c2b 100644 --- a/FunGame.Desktop/Model/LoginModel.cs +++ b/FunGame.Desktop/Model/LoginModel.cs @@ -1,9 +1,12 @@ -using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Api.Transmittal; +using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Architecture; using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Exception; +using Milimoe.FunGame.Core.Library.SQLScript.Common; +using Milimoe.FunGame.Core.Library.SQLScript.Entity; using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Library.Component; @@ -26,7 +29,7 @@ namespace Milimoe.FunGame.Desktop.Model { try { - if (SocketObject.SocketType == SocketMessageType.Login || SocketObject.SocketType == SocketMessageType.CheckLogin) + if (SocketObject.SocketType == SocketMessageType.RunTime_Login || SocketObject.SocketType == SocketMessageType.RunTime_CheckLogin) { Work = SocketObject; Working = false; @@ -53,7 +56,7 @@ namespace Milimoe.FunGame.Desktop.Model if (objs.Length > 2) autokey = (string)objs[2]; password = password.Encrypt(username); SetWorking(); - if (Socket.Send(SocketMessageType.Login, username, password, autokey) == SocketResult.Success) + if (Socket.Send(SocketMessageType.RunTime_Login, username, password, autokey) == SocketResult.Success) { string ErrorMsg = ""; Guid CheckLoginKey = Guid.Empty; @@ -64,7 +67,7 @@ namespace Milimoe.FunGame.Desktop.Model return false; } SetWorking(); - if (Socket.Send(SocketMessageType.CheckLogin, CheckLoginKey) == SocketResult.Success) + if (Socket.Send(SocketMessageType.RunTime_CheckLogin, CheckLoginKey) == SocketResult.Success) { User user = await Task.Factory.StartNew(GetLoginUserAsync); // 创建User对象并返回到Main @@ -105,6 +108,70 @@ namespace Milimoe.FunGame.Desktop.Model return (key, msg); } + public static string ForgetPassword_CheckVerifyCode(string username, string email, string verifycode) + { + string msg = "无法找回您的密码,请稍后再试。"; + + try + { + DataRequest request = RunTime.NewDataRequest(DataRequestType.Login_GetFindPasswordVerifyCode); + request.AddRequestData(ForgetVerifyCodes.Column_Username, username); + request.AddRequestData(ForgetVerifyCodes.Column_Email, email); + if (verifycode.Trim() == "") + { + // 未发送verifycode,说明需要系统生成一个验证码 + request.AddRequestData(ForgetVerifyCodes.Column_ForgetVerifyCode, ""); + request.SendRequest(); + if (request.Result == RequestResult.Success) + { + msg = request.GetResult("msg") ?? msg; + } + else RunTime.WritelnSystemInfo(request.Error); + } + else + { + // 发送verifycode,需要验证 + request.AddRequestData(ForgetVerifyCodes.Column_ForgetVerifyCode, verifycode); + request.SendRequest(); + if (request.Result == RequestResult.Success) + { + msg = request.GetResult("msg") ?? msg; + } + else RunTime.WritelnSystemInfo(request.Error); + } + } + catch (Exception e) + { + RunTime.WritelnSystemInfo(e.GetErrorInfo()); + } + + return msg; + } + + public static string ForgetPassword_UpdatePassword(string username, string password) + { + string msg = "无法更新您的密码,请稍后再试。"; + + try + { + DataRequest request = RunTime.NewDataRequest(DataRequestType.Login_UpdatePassword); + request.AddRequestData(UserQuery.Column_Username, username); + request.AddRequestData(UserQuery.Column_Password, password.Encrypt(username)); + request.SendRequest(); + if (request.Result == RequestResult.Success) + { + msg = request.GetResult("msg") ?? msg; + } + else RunTime.WritelnSystemInfo(request.Error); + } + catch (Exception e) + { + RunTime.WritelnSystemInfo(e.GetErrorInfo()); + } + + return msg; + } + private static User GetLoginUserAsync() { User user = General.UnknownUserInstance; diff --git a/FunGame.Desktop/Model/MainModel.cs b/FunGame.Desktop/Model/MainModel.cs index 928ad80..bd2a902 100644 --- a/FunGame.Desktop/Model/MainModel.cs +++ b/FunGame.Desktop/Model/MainModel.cs @@ -29,7 +29,7 @@ namespace Milimoe.FunGame.Desktop.Model if (Usercfg.LoginKey != Guid.Empty) { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.Logout, Usercfg.LoginKey) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.RunTime_Logout, Usercfg.LoginKey) == SocketResult.Success) { string msg = ""; Guid key = Guid.Empty; @@ -57,7 +57,7 @@ namespace Milimoe.FunGame.Desktop.Model try { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.IntoRoom, room.Roomid) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Main_IntoRoom, room.Roomid) == SocketResult.Success) { string roomid = await Task.Factory.StartNew(SocketHandler_IntoRoom); if (roomid.Trim() != "" && roomid == "-1") @@ -84,7 +84,7 @@ namespace Milimoe.FunGame.Desktop.Model try { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.UpdateRoom) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Main_UpdateRoom) == SocketResult.Success) { List list = await Task.Factory.StartNew(SocketHandler_UpdateRoom); Main.UpdateUI(MainInvokeType.UpdateRoom, list); @@ -104,7 +104,7 @@ namespace Milimoe.FunGame.Desktop.Model try { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.GetRoomPlayerCount, roomid) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Room_GetRoomPlayerCount, roomid) == SocketResult.Success) { return await Task.Factory.StartNew(SocketHandler_GetRoomPlayerCount); } @@ -123,7 +123,7 @@ namespace Milimoe.FunGame.Desktop.Model try { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.QuitRoom, roomid, isMaster) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Main_QuitRoom, roomid, isMaster) == SocketResult.Success) { result = await Task.Factory.StartNew(SocketHandler_QuitRoom); if (result) @@ -146,7 +146,7 @@ namespace Milimoe.FunGame.Desktop.Model try { SetWorking(); - if (RunTime.Socket?.Send(SocketMessageType.CreateRoom, RoomType, Usercfg.LoginUser.Id, Password) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Main_CreateRoom, RoomType, Usercfg.LoginUser.Id, Password) == SocketResult.Success) { string roomid = await Task.Factory.StartNew(SocketHandler_CreateRoom); if (roomid.Trim() != "") @@ -167,7 +167,7 @@ namespace Milimoe.FunGame.Desktop.Model { try { - if (RunTime.Socket?.Send(SocketMessageType.Chat, msg) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.Main_Chat, msg) == SocketResult.Success) { return true; } @@ -185,15 +185,15 @@ namespace Milimoe.FunGame.Desktop.Model try { // 定义接收的通信类型 - SocketMessageType[] SocketMessageTypes = new SocketMessageType[] { SocketMessageType.GetNotice, SocketMessageType.Logout, SocketMessageType.IntoRoom, SocketMessageType.QuitRoom, - SocketMessageType.Chat, SocketMessageType.UpdateRoom, SocketMessageType.CreateRoom }; - if (SocketObject.SocketType == SocketMessageType.HeartBeat) + SocketMessageType[] SocketMessageTypes = new SocketMessageType[] { SocketMessageType.Main_GetNotice, SocketMessageType.RunTime_Logout, SocketMessageType.Main_IntoRoom, SocketMessageType.Main_QuitRoom, + SocketMessageType.Main_Chat, SocketMessageType.Main_UpdateRoom, SocketMessageType.Main_CreateRoom }; + if (SocketObject.SocketType == SocketMessageType.RunTime_HeartBeat) { // 心跳包单独处理 if ((RunTime.Socket?.Connected ?? false) && Usercfg.LoginUser.Id != 0) Main.UpdateUI(MainInvokeType.SetGreenAndPing); } - else if (SocketObject.SocketType == SocketMessageType.ForceLogout) + else if (SocketObject.SocketType == SocketMessageType.RunTime_ForceLogout) { // 服务器强制下线登录 Guid key = Guid.Empty; @@ -207,7 +207,7 @@ namespace Milimoe.FunGame.Desktop.Model Main.UpdateUI(MainInvokeType.LogOut, msg ?? ""); } } - else if (SocketObject.SocketType == SocketMessageType.Chat) + else if (SocketObject.SocketType == SocketMessageType.Main_Chat) { // 收到房间聊天信息 string? user = "", msg = ""; @@ -218,7 +218,7 @@ namespace Milimoe.FunGame.Desktop.Model Main.GetMessage(msg, TimeType.None); } } - else if (SocketObject.SocketType == SocketMessageType.UpdateRoomMaster) + else if (SocketObject.SocketType == SocketMessageType.Room_UpdateRoomMaster) { // 收到房间更换房主的信息 User user = General.UnknownUserInstance; diff --git a/FunGame.Desktop/Model/RegisterModel.cs b/FunGame.Desktop/Model/RegisterModel.cs index bb93e02..dfe2ffc 100644 --- a/FunGame.Desktop/Model/RegisterModel.cs +++ b/FunGame.Desktop/Model/RegisterModel.cs @@ -20,7 +20,7 @@ namespace Milimoe.FunGame.Desktop.Model { try { - if (SocketObject.SocketType == SocketMessageType.Reg || SocketObject.SocketType == SocketMessageType.CheckReg) + if (SocketObject.SocketType == SocketMessageType.RunTime_Reg || SocketObject.SocketType == SocketMessageType.RunTime_CheckReg) { Work = SocketObject; Working = false; @@ -47,7 +47,7 @@ namespace Milimoe.FunGame.Desktop.Model password = password.Encrypt(username); if (objs.Length > 2) email = (string)objs[2]; SetWorking(); - if (Socket.Send(SocketMessageType.Reg, username, email) == SocketResult.Success) + if (Socket.Send(SocketMessageType.RunTime_Reg, username, email) == SocketResult.Success) { RegInvokeType InvokeType = await Task.Factory.StartNew(GetRegInvokeType); while (true) @@ -59,7 +59,7 @@ namespace Milimoe.FunGame.Desktop.Model if (cancel != MessageResult.Cancel) { SetWorking(); - if (Socket.Send(SocketMessageType.CheckReg, username, password, email, verifycode) == SocketResult.Success) + if (Socket.Send(SocketMessageType.RunTime_CheckReg, username, password, email, verifycode) == SocketResult.Success) { bool success = false; string msg = ""; diff --git a/FunGame.Desktop/Model/RunTimeModel.cs b/FunGame.Desktop/Model/RunTimeModel.cs index 2489560..50e4e3b 100644 --- a/FunGame.Desktop/Model/RunTimeModel.cs +++ b/FunGame.Desktop/Model/RunTimeModel.cs @@ -59,10 +59,10 @@ namespace Milimoe.FunGame.Desktop.Model // 设置可复用Socket RunTime.Socket = Socket; // 发送连接请求 - if (Socket.Send(SocketMessageType.Connect) == SocketResult.Success) + if (Socket.Send(SocketMessageType.RunTime_Connect) == SocketResult.Success) { SocketMessageType Result = Receiving(); - if (Result == SocketMessageType.Connect) + if (Result == SocketMessageType.RunTime_Connect) { Main.GetMessage("连接服务器成功,请登录账号以体验FunGame。"); Main.UpdateUI(MainInvokeType.Connected); diff --git a/FunGame.Desktop/UI/Login/ForgetPassword.cs b/FunGame.Desktop/UI/Login/ForgetPassword.cs index cc05f7a..e700677 100644 --- a/FunGame.Desktop/UI/Login/ForgetPassword.cs +++ b/FunGame.Desktop/UI/Login/ForgetPassword.cs @@ -1,8 +1,6 @@ -using Milimoe.FunGame.Core.Api.Transmittal; -using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Exception; -using Milimoe.FunGame.Core.Library.SQLScript.Common; -using Milimoe.FunGame.Core.Library.SQLScript.Entity; +using Milimoe.FunGame.Desktop.Controller; using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Library.Component; @@ -33,83 +31,88 @@ namespace Milimoe.FunGame.Desktop.UI return; } - string msg = ""; + string msg; bool success = false; try { - DataRequest request = RunTime.NewDataRequest(DataRequestType.GetFindPasswordVerifyCode); - request.AddRequestData(UserQuery.Column_Username, username); - request.AddRequestData(UserQuery.Column_Email, email); - request.AddRequestData(ForgetVerifyCodes.Column_ForgetVerifyCode, ""); - request.SendRequest(); - if (request.Result == RequestResult.Success) + // 发送找回密码请求 + msg = LoginController.ForgetPassword_CheckVerifyCode(username, email); + + if (msg.Trim() != "") { - msg = request.GetResult("msg") ?? ""; - if (msg.Trim() != "") + // 如果返回一个信息,则停止找回密码 + ShowMessage.ErrorMessage(msg); + } + else + { + while (!success) { - // 如果返回一个信息,则停止找回密码 - ShowMessage.ErrorMessage(msg); - } - else - { - while (!success) + string verifycode = ShowMessage.InputMessageCancel("请输入找回密码邮件中的6位数字验证码", "注册验证码", out MessageResult result); + if (result != MessageResult.Cancel) { - request[ForgetVerifyCodes.Column_ForgetVerifyCode] = ""; - string verifycode = ShowMessage.InputMessageCancel("请输入找回密码邮件中的6位数字验证码", "注册验证码", out MessageResult result); - if (result != MessageResult.Cancel) + if (verifycode.Trim() != "") { - if (verifycode.Trim() != "") + msg = LoginController.ForgetPassword_CheckVerifyCode(username, email, verifycode); + if (msg.Trim() != "") { - request[ForgetVerifyCodes.Column_ForgetVerifyCode] = verifycode; - request.SendRequest(); - if (request.Result == RequestResult.Success) - { - msg = request.GetResult("msg") ?? ""; - if (msg.Trim() != "") - { - ShowMessage.ErrorMessage(msg); - } - else - { - success = true; - break; - } - } - else - { - RunTime.WritelnSystemInfo(request.Error); - } + ShowMessage.ErrorMessage(msg); } else { - ShowMessage.WarningMessage("不能输入空值!"); + success = true; + break; } } - else break; - } - if (success) - { - bool checkpass = true; - while (checkpass) + else + { + ShowMessage.WarningMessage("不能输入空值!"); + } + } + else break; + } + if (success) + { + while (true) + { + string newpass = ShowMessage.InputMessageCancel("请输入新密码", "设置新密码", out MessageResult result); + if (result != MessageResult.Cancel) { - string newpass = ShowMessage.InputMessageCancel("请输入新密码", "新密码", out MessageResult result); if (newpass.Trim() != "") { if (newpass.Length < 6 || newpass.Length > 15) // 字节范围 3~12 { ShowMessage.ErrorMessage("密码长度不符合要求:6~15个字符数"); } - else checkpass = false; + else + { + msg = LoginController.ForgetPassword_UpdatePassword(username, newpass); + if (msg.Trim() != "") + { + ShowMessage.ErrorMessage(msg); + } + else + { + ShowMessage.Message("密码更新成功!请您牢记新的密码。", "找回密码"); + break; + } + } + } + } + else + { + if (ShowMessage.OKCancelMessage("确定放弃设置新密码吗?", "找回密码") == MessageResult.OK) + { + success = false; + break; } } - // TODO. 等更新UpdatePassword } } - } - else - { - RunTime.WritelnSystemInfo(request.Error); + if (success) + { + Dispose(); + } } } catch (Exception ex) diff --git a/FunGame.Desktop/UI/Login/Login.cs b/FunGame.Desktop/UI/Login/Login.cs index 0e90a60..d276d45 100644 --- a/FunGame.Desktop/UI/Login/Login.cs +++ b/FunGame.Desktop/UI/Login/Login.cs @@ -80,6 +80,7 @@ namespace Milimoe.FunGame.Desktop.UI private void ForgetPassword_Click(object sender, EventArgs e) { OpenForm.SingleForm(FormType.ForgetPassword, OpenFormType.Dialog); + UsernameText.Focus(); } public EventResult FailedLoginEvent(object sender, LoginEventArgs e) diff --git a/FunGame.Desktop/UI/Main/Main.Designer.cs b/FunGame.Desktop/UI/Main/Main.Designer.cs index b6c57f3..3a325d2 100644 --- a/FunGame.Desktop/UI/Main/Main.Designer.cs +++ b/FunGame.Desktop/UI/Main/Main.Designer.cs @@ -81,7 +81,7 @@ namespace Milimoe.FunGame.Desktop.UI Title.Location = new Point(3, 3); Title.Size = new Size(689, 47); Title.TabIndex = 96; - Title.Text = "FunGame By Mili.cyou"; + Title.Text = "FunGame By Milimoe"; Title.TextAlign = ContentAlignment.MiddleLeft; // // Exit @@ -519,7 +519,7 @@ namespace Milimoe.FunGame.Desktop.UI Copyright.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; Copyright.BackColor = Color.Transparent; Copyright.Font = new Font("LanaPixel", 10.5F, FontStyle.Regular, GraphicsUnit.Point); - Copyright.LinkArea = new LinkArea(6, 10); + Copyright.LinkArea = new LinkArea(6, 8); Copyright.LinkBehavior = LinkBehavior.AlwaysUnderline; Copyright.LinkColor = Color.Teal; Copyright.Location = new Point(3, 430); @@ -527,7 +527,7 @@ namespace Milimoe.FunGame.Desktop.UI Copyright.Size = new Size(186, 23); Copyright.TabIndex = 97; Copyright.TabStop = true; - Copyright.Text = "©2023 Mili.cyou. 米粒的糖果屋"; + Copyright.Text = "©2023 Milimoe. 米粒的糖果屋"; Copyright.TextAlign = ContentAlignment.MiddleLeft; Copyright.UseCompatibleTextRendering = true; Copyright.LinkClicked += Copyright_LinkClicked; diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs index fe375c1..ac9e443 100644 --- a/FunGame.Desktop/UI/Main/Main.cs +++ b/FunGame.Desktop/UI/Main/Main.cs @@ -1370,8 +1370,8 @@ namespace Milimoe.FunGame.Desktop.UI ShowMessage.ErrorMessage("格式错误!\n这不是一个服务器地址。"); return true; } - ErrorType ErrorType = NetworkUtility.IsServerAddress(ip, port); - if (ErrorType == Core.Library.Constant.ErrorType.None) + ErrorIPAddressType ErrorType = NetworkUtility.IsServerAddress(ip, port); + if (ErrorType == Core.Library.Constant.ErrorIPAddressType.None) { RunTime.Session.Server_IP = ip; RunTime.Session.Server_Port = port; @@ -1379,8 +1379,8 @@ namespace Milimoe.FunGame.Desktop.UI Config.FunGame_isAutoRetry = true; RunTime.Controller?.Connect(); } - else if (ErrorType == Core.Library.Constant.ErrorType.IsNotIP) ShowMessage.ErrorMessage("这不是一个IP地址!"); - else if (ErrorType == Core.Library.Constant.ErrorType.IsNotPort) ShowMessage.ErrorMessage("这不是一个端口号!\n正确范围:1~65535"); + else if (ErrorType == Core.Library.Constant.ErrorIPAddressType.IsNotIP) ShowMessage.ErrorMessage("这不是一个IP地址!"); + else if (ErrorType == Core.Library.Constant.ErrorIPAddressType.IsNotPort) ShowMessage.ErrorMessage("这不是一个端口号!\n正确范围:1~65535"); else ShowMessage.ErrorMessage("格式错误!\n这不是一个服务器地址。"); break; default: