From 387714288f91191f28fe71bece8b5ce52713a9fe Mon Sep 17 00:00:00 2001 From: Mili Date: Sun, 5 Mar 2023 00:57:54 +0800 Subject: [PATCH] CheckReg --- FunGame.Core/Interface/Event/EventHandlers.cs | 8 ++-- FunGame.Core/Interface/Event/Events.cs | 8 ++-- .../Library/Common/Event/RegisterEventArgs.cs | 16 +++++++ FunGame.Core/Library/Constant/ConstantSet.cs | 4 +- FunGame.Core/Library/Constant/TypeEnum.cs | 1 + .../Library/SQLScript/Common/Common.cs | 5 +++ FunGame.Core/Library/SQLScript/Entity/User.cs | 14 +++++-- FunGame.Core/Service/SocketManager.cs | 3 ++ .../Controller/RegisterController.cs | 16 ++++++- FunGame.Desktop/Library/Base/BaseReg.cs | 13 ++++-- .../Library/Component/ShowMessage.cs | 10 +++++ FunGame.Desktop/Model/MainModel.cs | 38 +++++++++++++++++ FunGame.Desktop/Model/RegisterModel.cs | 32 +++++++++++++- FunGame.Desktop/UI/Login/Login.cs | 1 + FunGame.Desktop/UI/Register/Register.cs | 42 ++++++++++++++++++- 15 files changed, 190 insertions(+), 21 deletions(-) create mode 100644 FunGame.Core/Library/Common/Event/RegisterEventArgs.cs diff --git a/FunGame.Core/Interface/Event/EventHandlers.cs b/FunGame.Core/Interface/Event/EventHandlers.cs index d68ab43..8fb4f30 100644 --- a/FunGame.Core/Interface/Event/EventHandlers.cs +++ b/FunGame.Core/Interface/Event/EventHandlers.cs @@ -73,10 +73,10 @@ namespace Milimoe.FunGame.Core.Interface public event SucceedEventHandler? SucceedReg; public event FailedEventHandler? FailedReg; - public EventResult OnBeforeRegEvent(GeneralEventArgs e); - public EventResult OnAfterRegEvent(GeneralEventArgs e); - public EventResult OnSucceedRegEvent(GeneralEventArgs e); - public EventResult OnFailedRegEvent(GeneralEventArgs e); + public EventResult OnBeforeRegEvent(RegisterEventArgs e); + public EventResult OnAfterRegEvent(RegisterEventArgs e); + public EventResult OnSucceedRegEvent(RegisterEventArgs e); + public EventResult OnFailedRegEvent(RegisterEventArgs e); } public interface IIntoRoomEventHandler : IEventHandler diff --git a/FunGame.Core/Interface/Event/Events.cs b/FunGame.Core/Interface/Event/Events.cs index 3c07946..bbcbcce 100644 --- a/FunGame.Core/Interface/Event/Events.cs +++ b/FunGame.Core/Interface/Event/Events.cs @@ -40,10 +40,10 @@ namespace Milimoe.FunGame.Core.Interface public interface IRegEvent { - public EventResult BeforeRegEvent(object sender, GeneralEventArgs e); - public EventResult AfterRegEvent(object sender, GeneralEventArgs e); - public EventResult SucceedRegEvent(object sender, GeneralEventArgs e); - public EventResult FailedRegEvent(object sender, GeneralEventArgs e); + public EventResult BeforeRegEvent(object sender, RegisterEventArgs e); + public EventResult AfterRegEvent(object sender, RegisterEventArgs e); + public EventResult SucceedRegEvent(object sender, RegisterEventArgs e); + public EventResult FailedRegEvent(object sender, RegisterEventArgs e); } public interface IIntoRoomEvent diff --git a/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs b/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs new file mode 100644 index 0000000..a261ba3 --- /dev/null +++ b/FunGame.Core/Library/Common/Event/RegisterEventArgs.cs @@ -0,0 +1,16 @@ +namespace Milimoe.FunGame.Core.Library.Common.Event +{ + public class RegisterEventArgs : GeneralEventArgs + { + public string Username; + public string Password; + public string Email; + + public RegisterEventArgs(string username = "", string password = "", string email = "") + { + Username = username; + Password = password; + Email = email; + } + } +} diff --git a/FunGame.Core/Library/Constant/ConstantSet.cs b/FunGame.Core/Library/Constant/ConstantSet.cs index 33b9fbf..eef19aa 100644 --- a/FunGame.Core/Library/Constant/ConstantSet.cs +++ b/FunGame.Core/Library/Constant/ConstantSet.cs @@ -33,8 +33,10 @@ public const string Disconnect = "Disconnect"; public const string HeartBeat = "HeartBeat"; public const string IntoRoom = "IntoRoom"; - public const string Chat = "Chat"; public const string QuitRoom = "QuitRoom"; + public const string Chat = "Chat"; + public const string Reg = "Reg"; + public const string CheckReg = "CheckReg"; } public class ReflectionSet diff --git a/FunGame.Core/Library/Constant/TypeEnum.cs b/FunGame.Core/Library/Constant/TypeEnum.cs index 89129f9..2d461d6 100644 --- a/FunGame.Core/Library/Constant/TypeEnum.cs +++ b/FunGame.Core/Library/Constant/TypeEnum.cs @@ -58,6 +58,7 @@ Disconnect, HeartBeat, IntoRoom, + QuitRoom, Chat, Reg, CheckReg diff --git a/FunGame.Core/Library/SQLScript/Common/Common.cs b/FunGame.Core/Library/SQLScript/Common/Common.cs index 539abff..92acbf2 100644 --- a/FunGame.Core/Library/SQLScript/Common/Common.cs +++ b/FunGame.Core/Library/SQLScript/Common/Common.cs @@ -52,5 +52,10 @@ namespace Milimoe.FunGame.Core.Library.SQLScript.Common { return $"{Constant.Command_Select} {Constant.Command_All} {Constant.Command_From} {TableName} {Constant.Command_Where} {Column_Username} = '{Username}' and {Column_Email} = '{Email}' and {Column_RegVerifyCode} = '{RegVerifyCode}'"; } + + public static string Delete_RegVerifyCode(string Username, string Email) + { + return $"{Constant.Command_Delete} {Constant.Command_From} {TableName} {Constant.Command_Where} {Column_Username} = '{Username}' and {Column_Email} = '{Email}'"; + } } } diff --git a/FunGame.Core/Library/SQLScript/Entity/User.cs b/FunGame.Core/Library/SQLScript/Entity/User.cs index 08250ec..8c01909 100644 --- a/FunGame.Core/Library/SQLScript/Entity/User.cs +++ b/FunGame.Core/Library/SQLScript/Entity/User.cs @@ -2,7 +2,7 @@ { public class UserQuery { - public const string TableName= "User"; + public const string TableName= "Users"; public const string Column_UID = "UID"; public const string Column_Username = "Username"; public const string Column_Password = "Password"; @@ -18,6 +18,7 @@ public const string Column_Credits = "Credits"; public const string Column_Materials = "Materials"; public const string Column_GameTime = "GameTime"; + public const string Column_AutoKey = "AutoKey"; public const string Select_Users = $"{Constant.Command_Select} {Constant.Command_All} {Constant.Command_From} {TableName}"; public static string Select_Users_LoginQuery(string Username, string Password) @@ -30,16 +31,21 @@ return $"{Select_Users} {Constant.Command_Where} {Where}'"; } - public static string CheckLogin(string Username, string IP) + public static string Update_CheckLogin(string Username, string IP) { return @$"{Constant.Command_Update} {TableName} {Constant.Command_Set} {Column_LastTime} = '{DateTime.Now}', {Column_LastIP} = '{IP}' {Constant.Command_Where} {Column_Username} = '{Username}'"; } - public static string Register(string UserName, string Password, string Email) + public static string Insert_Register(string Username, string Password, string Email) { return @$"{Constant.Command_Insert} {Constant.Command_Into} {TableName} ({Column_Username}, {Column_Password}, {Column_Email}, {Column_RegTime}) - {Constant.Command_Values} ('{UserName}', '{Password}', {Email}, '{DateTime.Now}')"; + {Constant.Command_Values} ('{Username}', '{Password}', '{Email}', '{DateTime.Now}')"; + } + + public static string Select_CheckAutoKey(string Username, string AutoKey) + { + return $"{Select_Users} {Constant.Command_Where} {Column_Username} = '{Username}' and {Column_AutoKey} = '{AutoKey}'"; } } } diff --git a/FunGame.Core/Service/SocketManager.cs b/FunGame.Core/Service/SocketManager.cs index b367099..bfc8944 100644 --- a/FunGame.Core/Service/SocketManager.cs +++ b/FunGame.Core/Service/SocketManager.cs @@ -216,7 +216,10 @@ namespace Milimoe.FunGame.Core.Service SocketMessageType.Disconnect => SocketSet.Disconnect, SocketMessageType.HeartBeat => SocketSet.HeartBeat, SocketMessageType.IntoRoom => SocketSet.IntoRoom, + SocketMessageType.QuitRoom => SocketSet.QuitRoom, SocketMessageType.Chat => SocketSet.Chat, + SocketMessageType.Reg => SocketSet.Reg, + SocketMessageType.CheckReg => SocketSet.CheckReg, _ => SocketSet.Unknown, }; } diff --git a/FunGame.Desktop/Controller/RegisterController.cs b/FunGame.Desktop/Controller/RegisterController.cs index a0c0726..bb7dbe9 100644 --- a/FunGame.Desktop/Controller/RegisterController.cs +++ b/FunGame.Desktop/Controller/RegisterController.cs @@ -9,12 +9,24 @@ namespace Milimoe.FunGame.Desktop.Controller { public static bool Reg(params object[]? objs) { - RunTime.Register?.OnBeforeRegEvent(new GeneralEventArgs()); + + if (RunTime.Register != null) RunTime.Register.OnBeforeRegEvent(RunTime.Register.EventArgs); bool result = RegisterModel.Reg(objs); if (!result) { ShowMessage.ErrorMessage("注册失败!!", "注册失败", 5); - RunTime.Register?.OnFailedRegEvent(new GeneralEventArgs()); + if (RunTime.Register != null) RunTime.Register.OnFailedRegEvent(RunTime.Register.EventArgs); + } + return result; + } + + public static bool CheckReg(params object[]? objs) + { + bool result = RegisterModel.CheckReg(objs); + if (!result) + { + ShowMessage.ErrorMessage("注册失败!!", "注册失败", 5); + if (RunTime.Register != null) RunTime.Register.OnFailedRegEvent(RunTime.Register.EventArgs); } return result; } diff --git a/FunGame.Desktop/Library/Base/BaseReg.cs b/FunGame.Desktop/Library/Base/BaseReg.cs index 5c626dd..8f51b57 100644 --- a/FunGame.Desktop/Library/Base/BaseReg.cs +++ b/FunGame.Desktop/Library/Base/BaseReg.cs @@ -7,12 +7,17 @@ namespace Milimoe.FunGame.Desktop.Library.Base { public class BaseReg : GeneralForm, IRegEventHandler { + public delegate EventResult BeforeEventHandler(object sender, RegisterEventArgs e); + public delegate EventResult AfterEventHandler(object sender, RegisterEventArgs e); + public delegate EventResult SucceedEventHandler(object sender, RegisterEventArgs e); + public delegate EventResult FailedEventHandler(object sender, RegisterEventArgs e); + public event IEventHandler.BeforeEventHandler? BeforeReg; public event IEventHandler.AfterEventHandler? AfterReg; public event IEventHandler.SucceedEventHandler? SucceedReg; public event IEventHandler.FailedEventHandler? FailedReg; - public EventResult OnAfterRegEvent(GeneralEventArgs e) + public EventResult OnAfterRegEvent(RegisterEventArgs e) { if (AfterReg != null) { @@ -21,7 +26,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnBeforeRegEvent(GeneralEventArgs e) + public EventResult OnBeforeRegEvent(RegisterEventArgs e) { if (BeforeReg != null) { @@ -30,7 +35,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedRegEvent(GeneralEventArgs e) + public EventResult OnFailedRegEvent(RegisterEventArgs e) { if (FailedReg != null) { @@ -39,7 +44,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedRegEvent(GeneralEventArgs e) + public EventResult OnSucceedRegEvent(RegisterEventArgs e) { if (SucceedReg != null) { diff --git a/FunGame.Desktop/Library/Component/ShowMessage.cs b/FunGame.Desktop/Library/Component/ShowMessage.cs index dbbf68e..d68b28a 100644 --- a/FunGame.Desktop/Library/Component/ShowMessage.cs +++ b/FunGame.Desktop/Library/Component/ShowMessage.cs @@ -206,6 +206,15 @@ namespace Milimoe.FunGame.Desktop.Library.Component string result = new ShowMessage(objs).InputResult; return result; } + + public static string InputMessageCancel(string msg, string title, out MessageResult cancel) + { + object[] objs = { title, msg, 0, MessageButtonType.Input, BUTTON_CANCEL, BUTTON_RETRY, BUTTON_CANCEL }; + ShowMessage window = new ShowMessage(objs); + string result = window.InputResult; + cancel = window.MessageResult; + return result; + } private void ChangeSecond(string msg, int s) { @@ -229,6 +238,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component private void InputButton_Click() { + MessageResult = MessageResult.OK; if (InputText.Text != null && !InputText.Text.Equals("")) { InputResult = InputText.Text; diff --git a/FunGame.Desktop/Model/MainModel.cs b/FunGame.Desktop/Model/MainModel.cs index 90cffeb..4bbbdff 100644 --- a/FunGame.Desktop/Model/MainModel.cs +++ b/FunGame.Desktop/Model/MainModel.cs @@ -8,6 +8,8 @@ using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Library.Component; using Milimoe.FunGame.Desktop.Library.Interface; using Milimoe.FunGame.Desktop.UI; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; namespace Milimoe.FunGame.Desktop.Model { @@ -349,9 +351,19 @@ namespace Milimoe.FunGame.Desktop.Model SocketHandler_IntoRoom(objs); break; + case SocketMessageType.QuitRoom: + break; + case SocketMessageType.Chat: SocketHandler_Chat(objs); break; + + case SocketMessageType.Reg: + break; + + case SocketMessageType.CheckReg: + SocketHandler_CheckReg(objs); + break; case SocketMessageType.Unknown: default: @@ -505,6 +517,32 @@ namespace Milimoe.FunGame.Desktop.Model Main.OnFailedSendTalkEvent(new GeneralEventArgs()); Main.OnAfterSendTalkEvent(new GeneralEventArgs()); } + + private void SocketHandler_CheckReg(object[] objs) + { + if (objs != null && objs.Length > 1) + { + bool successful = NetworkUtility.ConvertJsonObject(objs[0])!; + string msg = NetworkUtility.ConvertJsonObject(objs[1])!; + ShowMessage.Message(msg, "注册结果"); + if (successful) + { + Main.GetMessage(msg, TimeType.None); + if (RunTime.Register != null) + { + RunTime.Register.CheckReg = true; + RunTime.Register.OnSucceedRegEvent(RunTime.Register.EventArgs); + RunTime.Register.OnAfterRegEvent(RunTime.Register.EventArgs); + } + return; + } + } + if (RunTime.Register != null) + { + RunTime.Register.OnFailedRegEvent(RunTime.Register.EventArgs); + RunTime.Register.OnAfterRegEvent(RunTime.Register.EventArgs); + } + } #endregion } diff --git a/FunGame.Desktop/Model/RegisterModel.cs b/FunGame.Desktop/Model/RegisterModel.cs index 7f1737c..5073c36 100644 --- a/FunGame.Desktop/Model/RegisterModel.cs +++ b/FunGame.Desktop/Model/RegisterModel.cs @@ -1,4 +1,5 @@ -using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Desktop.Library; @@ -29,5 +30,34 @@ namespace Milimoe.FunGame.Desktop.Model } return false; } + + public static bool CheckReg(params object[]? objs) + { + try + { + Core.Library.Common.Network.Socket? Socket = RunTime.Socket; + if (Socket != null && objs != null) + { + 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) + { + return true; + } + } + } + catch (Exception e) + { + e.GetErrorInfo(); + } + return false; + } } } diff --git a/FunGame.Desktop/UI/Login/Login.cs b/FunGame.Desktop/UI/Login/Login.cs index c00c761..6cbf1f5 100644 --- a/FunGame.Desktop/UI/Login/Login.cs +++ b/FunGame.Desktop/UI/Login/Login.cs @@ -86,6 +86,7 @@ namespace Milimoe.FunGame.Desktop.UI private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e) { + Dispose(); RunTime.Main?.OnSucceedLoginEvent(e); return EventResult.Success; } diff --git a/FunGame.Desktop/UI/Register/Register.cs b/FunGame.Desktop/UI/Register/Register.cs index a14564d..f9596fc 100644 --- a/FunGame.Desktop/UI/Register/Register.cs +++ b/FunGame.Desktop/UI/Register/Register.cs @@ -5,11 +5,15 @@ using Milimoe.FunGame.Desktop.Controller; using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Library.Base; using Milimoe.FunGame.Desktop.Library.Component; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; namespace Milimoe.FunGame.Desktop.UI { public partial class Register : BaseReg { + public bool CheckReg { get; set; } = false; + public RegisterEventArgs EventArgs { get; set; } = new RegisterEventArgs(); + public Register() { InitializeComponent(); @@ -19,6 +23,7 @@ namespace Milimoe.FunGame.Desktop.UI { base.BindEvent(); SucceedReg += SucceedRegEvent; + FailedReg += FailedRegEvent; } private bool Reg_Handler() @@ -47,11 +52,18 @@ namespace Milimoe.FunGame.Desktop.UI UsernameText.Focus(); return false; } + EventArgs = new RegisterEventArgs(username, password, email); if (!RegisterController.Reg(username, email)) { ShowMessage.Message("注册失败!!", "注册失败"); return false; } + else + { + CheckReg = false; + // 成功发送注册请求后 + CheckReg_Handler(username, password, email); + } } catch (Exception e) { @@ -61,6 +73,20 @@ namespace Milimoe.FunGame.Desktop.UI return true; } + public void CheckReg_Handler(string username, string password, string email) + { + if (!CheckReg) + { + string verifycode = ShowMessage.InputMessageCancel("请输入注册邮件中的6位数字验证码", "注册验证码", out MessageResult cancel); + if (cancel == MessageResult.Cancel) + { + CheckReg = true; + RegButton.Enabled = true; + } + RegisterController.CheckReg(username, password, email, verifycode); + } + } + /// /// 关闭窗口 /// @@ -73,12 +99,26 @@ namespace Milimoe.FunGame.Desktop.UI private EventResult SucceedRegEvent(object sender, GeneralEventArgs e) { + string username = ((RegisterEventArgs)e).Username; + string password = ((RegisterEventArgs)e).Password; + if (LoginController.LoginAccount(username, password)) + Dispose(); + return EventResult.Success; + } + + private EventResult FailedRegEvent(object sender, GeneralEventArgs e) + { + string username = ((RegisterEventArgs)e).Username; + string password = ((RegisterEventArgs)e).Password; + string email = ((RegisterEventArgs)e).Email; + CheckReg_Handler(username, password, email); return EventResult.Success; } private void RegButton_Click(object sender, EventArgs e) { - Reg_Handler(); + RegButton.Enabled = false; + if (!Reg_Handler()) RegButton.Enabled = true; } private void GoToLogin_Click(object sender, EventArgs e)