From 15ed5152dec60ac7afad74cb367268ba7c8bb885 Mon Sep 17 00:00:00 2001 From: Mili Date: Thu, 30 Mar 2023 22:11:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84RegModel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Library/Common/Event/RegisterEventArgs.cs | 17 ++- .../Controller/RegisterController.cs | 34 +++-- FunGame.Desktop/Model/LoginModel.cs | 20 +-- FunGame.Desktop/Model/RegisterModel.cs | 144 ++++++++++-------- FunGame.Desktop/UI/Main/Main.cs | 6 +- FunGame.Desktop/UI/Register/Register.cs | 54 +------ 6 files changed, 124 insertions(+), 151 deletions(-) diff --git a/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs b/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs index a261ba3..35ebe95 100644 --- a/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs +++ b/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs @@ -2,15 +2,18 @@ { public class RegisterEventArgs : GeneralEventArgs { - public string Username; - public string Password; - public string Email; + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public string Email { get; set; } = ""; - public RegisterEventArgs(string username = "", string password = "", string email = "") + public RegisterEventArgs(params object[]? objs) { - Username = username; - Password = password; - Email = email; + if (objs != null) + { + if (objs.Length > 0) Username = (string)objs[0]; + if (objs.Length > 1) Password = (string)objs[1]; + if (objs.Length > 2) Email = (string)objs[2]; + } } } } diff --git a/FunGame.Desktop/Controller/RegisterController.cs b/FunGame.Desktop/Controller/RegisterController.cs index a838b49..5368dc7 100644 --- a/FunGame.Desktop/Controller/RegisterController.cs +++ b/FunGame.Desktop/Controller/RegisterController.cs @@ -4,6 +4,8 @@ using Milimoe.FunGame.Desktop.Model; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.UI; using Milimoe.FunGame.Core.Library.Common.Architecture; +using Milimoe.FunGame.Core.Library.Exception; +using Milimoe.FunGame.Core.Library.Common.Event; namespace Milimoe.FunGame.Desktop.Controller { @@ -23,26 +25,26 @@ namespace Milimoe.FunGame.Desktop.Controller RegModel.Dispose(); } - public bool Reg(params object[]? objs) + public async Task Reg(params object[]? objs) { - if (Register.OnBeforeRegEvent(Register.EventArgs) == EventResult.Fail) return false; - bool result = RegModel.Reg(objs); - if (!result) - { - ShowMessage.ErrorMessage("注册失败!", "注册失败", 5); - Register.OnFailedRegEvent(Register.EventArgs); - } - return result; - } + bool result = false; - public bool CheckReg(params object[]? objs) - { - bool result = RegModel.CheckReg(objs); - if (!result) + try { - ShowMessage.ErrorMessage("注册失败!", "注册失败", 5); - RunTime.Register?.OnFailedRegEvent(Register.EventArgs); + RegisterEventArgs RegEventArgs = new (objs); + if (Register.OnBeforeRegEvent(RegEventArgs) == EventResult.Fail) return false; + + result = await RegModel.Reg(objs); + + if (result) Register.OnSucceedRegEvent(RegEventArgs); + else Register.OnFailedRegEvent(RegEventArgs); + Register.OnAfterRegEvent(RegEventArgs); } + catch (Exception e) + { + RunTime.WritelnSystemInfo(e.GetErrorInfo()); + } + return result; } } diff --git a/FunGame.Desktop/Model/LoginModel.cs b/FunGame.Desktop/Model/LoginModel.cs index 6309d98..0457a77 100644 --- a/FunGame.Desktop/Model/LoginModel.cs +++ b/FunGame.Desktop/Model/LoginModel.cs @@ -97,15 +97,12 @@ namespace Milimoe.FunGame.Desktop.Model { if (!Working) break; } - if (Work != null) + // 返回一个确认登录的Key + if (Work.Length > 0) key = Work.GetParam(0); + if (Work.Length > 1) msg = Work.GetParam(1); + if (key != Guid.Empty) { - // 返回一个确认登录的Key - if (Work.Length > 0) key = Work.GetParam(0); - if (Work.Length > 1) msg = Work.GetParam(1); - if (key != Guid.Empty) - { - Config.Guid_LoginKey = key; - } + Config.Guid_LoginKey = key; } } catch (Exception e) @@ -125,11 +122,8 @@ namespace Milimoe.FunGame.Desktop.Model { if (!Working) break; } - if (Work != null) - { - // 返回构造User对象的DataTable - if (Work.Length > 0) ds = Work.GetParam(0); - } + // 返回构造User对象的DataSet + if (Work.Length > 0) ds = Work.GetParam(0); } catch (Exception e) { diff --git a/FunGame.Desktop/Model/RegisterModel.cs b/FunGame.Desktop/Model/RegisterModel.cs index 1598152..b616e3e 100644 --- a/FunGame.Desktop/Model/RegisterModel.cs +++ b/FunGame.Desktop/Model/RegisterModel.cs @@ -12,6 +12,8 @@ namespace Milimoe.FunGame.Desktop.Model public class RegisterModel : BaseModel { private readonly Register Register; + private SocketObject Work; + private bool Working = false; public RegisterModel(Register reg) : base(RunTime.Socket) { @@ -22,21 +24,10 @@ namespace Milimoe.FunGame.Desktop.Model { try { - SocketMessageType type = SocketObject.SocketType; - object[] objs = SocketObject.Parameters; - switch (SocketObject.SocketType) + if (SocketObject.SocketType == SocketMessageType.Reg || SocketObject.SocketType == SocketMessageType.CheckReg) { - case SocketMessageType.Reg: - RegInvokeType invokeType = RegInvokeType.None; - if (objs != null && objs.Length > 0) - { - invokeType = SocketObject.GetParam(0); - Register.UpdateUI(invokeType); - } - break; - case SocketMessageType.CheckReg: - SocketHandler_CheckReg(SocketObject); - break; + Work = SocketObject; + Working = false; } } catch (Exception e) @@ -45,51 +36,7 @@ namespace Milimoe.FunGame.Desktop.Model } } - private void SocketHandler_CheckReg(SocketObject SocketObject) - { - if (SocketObject.Parameters != null && SocketObject.Parameters.Length > 1) - { - bool successful = SocketObject.GetParam(0)!; - string msg = SocketObject.GetParam(1)!; - ShowMessage.Message(msg, "注册结果"); - if (successful) - { - Register.OnSucceedRegEvent(Register.EventArgs); - Register.OnAfterRegEvent(Register.EventArgs); - Register.Close(); - return; - } - } - Register.OnFailedRegEvent(Register.EventArgs); - Register.OnAfterRegEvent(Register.EventArgs); - Register.UpdateUI(RegInvokeType.InputVerifyCode); - } - - public bool Reg(params object[]? objs) - { - try - { - Socket? Socket = RunTime.Socket; - if (Socket != null && objs != null) - { - string username = ""; - string email = ""; - if (objs.Length > 0) username = (string)objs[0]; - if (objs.Length > 1) email = (string)objs[1]; - if (Socket.Send(SocketMessageType.Reg, username, email) == SocketResult.Success) - { - return true; - } - } - } - catch (Exception e) - { - RunTime.WritelnSystemInfo(e.GetErrorInfo()); - } - return false; - } - - public bool CheckReg(params object[]? objs) + public async Task Reg(params object[]? objs) { try { @@ -99,15 +46,42 @@ namespace Milimoe.FunGame.Desktop.Model string username = ""; string password = ""; string email = ""; - string verifycode = ""; if (objs.Length > 0) username = (string)objs[0]; if (objs.Length > 1) password = (string)objs[1]; password = password.Encrypt(username); if (objs.Length > 2) email = (string)objs[2]; - if (objs.Length > 3) verifycode = (string)objs[3]; - if (Socket.Send(SocketMessageType.CheckReg, username, password, email, verifycode) == SocketResult.Success) + SetWorking(); + if (Socket.Send(SocketMessageType.Reg, username, email) == SocketResult.Success) { - return true; + RegInvokeType InvokeType = await Task.Factory.StartNew(GetRegInvokeType); + while (true) + { + switch (InvokeType) + { + case RegInvokeType.InputVerifyCode: + string verifycode = ShowMessage.InputMessageCancel("请输入注册邮件中的6位数字验证码", "注册验证码", out MessageResult cancel); + if (cancel != MessageResult.Cancel) + { + SetWorking(); + if (Socket.Send(SocketMessageType.CheckReg, username, password, email, verifycode) == SocketResult.Success) + { + bool success = false; + string msg = ""; + (success, msg) = await Task.Factory.StartNew(GetRegResult); + ShowMessage.Message(msg, "注册结果"); + if (success) return success; + } + break; + } + else return false; + case RegInvokeType.DuplicateUserName: + ShowMessage.WarningMessage("此账号名已被注册,请使用其他账号名。"); + return false; + case RegInvokeType.DuplicateEmail: + ShowMessage.WarningMessage("此邮箱已被使用,请使用其他邮箱注册。"); + return false; + } + } } } } @@ -117,5 +91,49 @@ namespace Milimoe.FunGame.Desktop.Model } return false; } + + private RegInvokeType GetRegInvokeType() + { + RegInvokeType type = RegInvokeType.None; + try + { + while (true) + { + if (!Working) break; + } + if (Work.Length > 0) type = Work.GetParam(0); + } + catch (Exception e) + { + RunTime.WritelnSystemInfo(e.GetErrorInfo()); + } + return type; + } + + private (bool, string) GetRegResult() + { + bool success = false; + string? msg = ""; + try + { + while (true) + { + if (!Working) break; + } + if (Work.Length > 0) success = Work.GetParam(0); + if (Work.Length > 1) msg = Work.GetParam(1) ?? ""; + } + catch (Exception e) + { + RunTime.WritelnSystemInfo(e.GetErrorInfo()); + } + return (success, msg); + } + + private void SetWorking() + { + Working = true; + Work = default; + } } } diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs index cd8f376..fd22386 100644 --- a/FunGame.Desktop/UI/Main/Main.cs +++ b/FunGame.Desktop/UI/Main/Main.cs @@ -1303,7 +1303,7 @@ namespace Milimoe.FunGame.Desktop.UI if (!Config.FunGame_isRetrying) { CurrentRetryTimes = -1; - Config.FunGame_isAutoLogin = true; + Config.FunGame_isAutoRetry = true; RunTime.Connector?.Connect(); } else @@ -1313,7 +1313,7 @@ namespace Milimoe.FunGame.Desktop.UI if (!Config.FunGame_isConnected) { CurrentRetryTimes = -1; - Config.FunGame_isAutoLogin = true; + Config.FunGame_isAutoRetry = true; RunTime.Connector?.GetServerConnection(); } break; @@ -1357,7 +1357,7 @@ namespace Milimoe.FunGame.Desktop.UI Constant.Server_Address = ip; Constant.Server_Port = port; CurrentRetryTimes = -1; - Config.FunGame_isAutoLogin = true; + Config.FunGame_isAutoRetry = true; RunTime.Connector?.Connect(); } else if (ErrorType == Core.Library.Constant.ErrorType.IsNotIP) ShowMessage.ErrorMessage("这不是一个IP地址!"); diff --git a/FunGame.Desktop/UI/Register/Register.cs b/FunGame.Desktop/UI/Register/Register.cs index c1e0428..5c02908 100644 --- a/FunGame.Desktop/UI/Register/Register.cs +++ b/FunGame.Desktop/UI/Register/Register.cs @@ -12,7 +12,6 @@ namespace Milimoe.FunGame.Desktop.UI public partial class Register : BaseReg { public bool CheckReg { get; set; } = false; - public RegisterEventArgs EventArgs { get; set; } = new RegisterEventArgs(); private readonly RegisterController RegController; @@ -34,7 +33,7 @@ namespace Milimoe.FunGame.Desktop.UI RegController.Dispose(); } - private bool Reg_Handler() + private async Task Reg_Handler() { try { @@ -98,57 +97,13 @@ namespace Milimoe.FunGame.Desktop.UI EmailText.Focus(); return false; } - EventArgs = new RegisterEventArgs(username, password, email); - if (!RegController.Reg(username, email)) - { - ShowMessage.Message("注册失败!", "注册失败"); - return false; - } + return await RegController.Reg(username, password, email); } catch (Exception e) { RunTime.WritelnSystemInfo(e.GetErrorInfo()); return false; } - return true; - } - - public void UpdateUI(RegInvokeType type) - { - try - { - void Action() - { - switch (type) - { - case RegInvokeType.InputVerifyCode: - string username = UsernameText.Text.Trim(); - string password = PasswordText.Text.Trim(); - string email = EmailText.Text.Trim(); - string verifycode = ShowMessage.InputMessageCancel("请输入注册邮件中的6位数字验证码", "注册验证码", out MessageResult cancel); - if (cancel != MessageResult.Cancel) RegController.CheckReg(username, password, email, verifycode); - else RegButton.Enabled = true; - break; - case RegInvokeType.DuplicateUserName: - ShowMessage.WarningMessage("此账号名已被注册,请使用其他账号名。"); - RegButton.Enabled = true; - break; - case RegInvokeType.DuplicateEmail: - ShowMessage.WarningMessage("此邮箱已被使用,请使用其他邮箱注册。"); - RegButton.Enabled = true; - break; - } - }; - if (!IsDisposed) - { - if (InvokeRequired) Invoke(Action); - else Action(); - } - } - catch (Exception e) - { - RunTime.WritelnSystemInfo(e.GetErrorInfo()); - } } /// @@ -169,10 +124,11 @@ namespace Milimoe.FunGame.Desktop.UI return EventResult.Success; } - private void RegButton_Click(object sender, EventArgs e) + private async void RegButton_Click(object sender, EventArgs e) { RegButton.Enabled = false; - if (!Reg_Handler()) RegButton.Enabled = true; + if (!await Reg_Handler()) RegButton.Enabled = true; + else Dispose(); } private void GoToLogin_Click(object sender, EventArgs e)