From 349a35f28a0298ad832ce97476162bbbc8d509d7 Mon Sep 17 00:00:00 2001 From: Mili Date: Sat, 11 Mar 2023 16:08:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=83=A8=E5=88=86EventArgs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FunGame.Core/Api/Transmittal/SQLHelper.cs | 16 ++++ FunGame.Core/Interface/Event/EventHandlers.cs | 70 +++++++++++----- .../Library/Common/Event/LoginEventArgs.cs | 14 ++++ .../Library/Common/Event/RoomEventArgs.cs | 12 +++ .../Library/Common/Event/SendTalkEventArgs.cs | 12 +++ FunGame.Core/Library/Constant/TypeEnum.cs | 26 ++++-- FunGame.Core/Library/Exception/Exception.cs | 12 ++- FunGame.Desktop/Controller/LoginController.cs | 6 +- FunGame.Desktop/Controller/MainController.cs | 49 +++++++++-- .../Controller/RunTimeController.cs | 28 +++---- FunGame.Desktop/Library/Base/BaseLogin.cs | 16 ++-- FunGame.Desktop/Library/Base/BaseMain.cs | 80 +++++++++--------- FunGame.Desktop/Library/Base/BaseReg.cs | 13 +-- FunGame.Desktop/Model/LoginModel.cs | 20 ++--- FunGame.Desktop/Model/MainModel.cs | 81 ++++++++++++++++--- FunGame.Desktop/UI/Login/Login.cs | 11 ++- FunGame.Desktop/UI/Main/Main.cs | 19 +---- 17 files changed, 333 insertions(+), 152 deletions(-) create mode 100644 FunGame.Core/Library/Common/Event/LoginEventArgs.cs create mode 100644 FunGame.Core/Library/Common/Event/RoomEventArgs.cs create mode 100644 FunGame.Core/Library/Common/Event/SendTalkEventArgs.cs diff --git a/FunGame.Core/Api/Transmittal/SQLHelper.cs b/FunGame.Core/Api/Transmittal/SQLHelper.cs index 970a681..c18370b 100644 --- a/FunGame.Core/Api/Transmittal/SQLHelper.cs +++ b/FunGame.Core/Api/Transmittal/SQLHelper.cs @@ -25,6 +25,14 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// 影响的行数 public abstract int Execute(out SQLResult Result); + /// + /// 执行一个指定的命令 + /// + /// 命令 + /// 执行结果 + /// 影响的行数 + public abstract int Execute(string Script, out SQLResult Result); + /// /// 查询DataSet /// @@ -32,6 +40,14 @@ namespace Milimoe.FunGame.Core.Api.Transmittal /// 结果集 public abstract DataSet ExecuteDataSet(out SQLResult Result); + /// + /// 执行指定的命令查询DataSet + /// + /// 命令 + /// 执行结果 + /// 结果集 + public abstract DataSet ExecuteDataSet(string Script, out SQLResult Result); + /// /// 关闭连接 /// diff --git a/FunGame.Core/Interface/Event/EventHandlers.cs b/FunGame.Core/Interface/Event/EventHandlers.cs index 8fb4f30..dbdc0bf 100644 --- a/FunGame.Core/Interface/Event/EventHandlers.cs +++ b/FunGame.Core/Interface/Event/EventHandlers.cs @@ -42,15 +42,20 @@ namespace Milimoe.FunGame.Core.Interface public interface ILoginEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, LoginEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, LoginEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, LoginEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, LoginEventArgs e); + public event BeforeEventHandler? BeforeLogin; public event AfterEventHandler? AfterLogin; public event SucceedEventHandler? SucceedLogin; public event FailedEventHandler? FailedLogin; - public EventResult OnBeforeLoginEvent(GeneralEventArgs e); - public EventResult OnAfterLoginEvent(GeneralEventArgs e); - public EventResult OnSucceedLoginEvent(GeneralEventArgs e); - public EventResult OnFailedLoginEvent(GeneralEventArgs e); + public EventResult OnBeforeLoginEvent(LoginEventArgs e); + public EventResult OnAfterLoginEvent(LoginEventArgs e); + public EventResult OnSucceedLoginEvent(LoginEventArgs e); + public EventResult OnFailedLoginEvent(LoginEventArgs e); } public interface ILogoutEventHandler : IEventHandler @@ -68,6 +73,11 @@ namespace Milimoe.FunGame.Core.Interface public interface IRegEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, RegisterEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, RegisterEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, RegisterEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, RegisterEventArgs e); + public event BeforeEventHandler? BeforeReg; public event AfterEventHandler? AfterReg; public event SucceedEventHandler? SucceedReg; @@ -81,54 +91,74 @@ namespace Milimoe.FunGame.Core.Interface public interface IIntoRoomEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, RoomEventArgs e); + public event BeforeEventHandler? BeforeIntoRoom; public event AfterEventHandler? AfterIntoRoom; public event SucceedEventHandler? SucceedIntoRoom; public event FailedEventHandler? FailedIntoRoom; - public EventResult OnBeforeIntoRoomEvent(GeneralEventArgs e); - public EventResult OnAfterIntoRoomEvent(GeneralEventArgs e); - public EventResult OnSucceedIntoRoomEvent(GeneralEventArgs e); - public EventResult OnFailedIntoRoomEvent(GeneralEventArgs e); + public EventResult OnBeforeIntoRoomEvent(RoomEventArgs e); + public EventResult OnAfterIntoRoomEvent(RoomEventArgs e); + public EventResult OnSucceedIntoRoomEvent(RoomEventArgs e); + public EventResult OnFailedIntoRoomEvent(RoomEventArgs e); } public interface ISendTalkEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, SendTalkEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, SendTalkEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, SendTalkEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, SendTalkEventArgs e); + public event BeforeEventHandler? BeforeSendTalk; public event AfterEventHandler? AfterSendTalk; public event SucceedEventHandler? SucceedSendTalk; public event FailedEventHandler? FailedSendTalk; - public EventResult OnBeforeSendTalkEvent(GeneralEventArgs e); - public EventResult OnAfterSendTalkEvent(GeneralEventArgs e); - public EventResult OnSucceedSendTalkEvent(GeneralEventArgs e); - public EventResult OnFailedSendTalkEvent(GeneralEventArgs e); + public EventResult OnBeforeSendTalkEvent(SendTalkEventArgs e); + public EventResult OnAfterSendTalkEvent(SendTalkEventArgs e); + public EventResult OnSucceedSendTalkEvent(SendTalkEventArgs e); + public EventResult OnFailedSendTalkEvent(SendTalkEventArgs e); } public interface ICreateRoomEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, RoomEventArgs e); + public event BeforeEventHandler? BeforeCreateRoom; public event AfterEventHandler? AfterCreateRoom; public event SucceedEventHandler? SucceedCreateRoom; public event FailedEventHandler? FailedCreateRoom; - public EventResult OnBeforeCreateRoomEvent(GeneralEventArgs e); - public EventResult OnAfterCreateRoomEvent(GeneralEventArgs e); - public EventResult OnSucceedCreateRoomEvent(GeneralEventArgs e); - public EventResult OnFailedCreateRoomEvent(GeneralEventArgs e); + public EventResult OnBeforeCreateRoomEvent(RoomEventArgs e); + public EventResult OnAfterCreateRoomEvent(RoomEventArgs e); + public EventResult OnSucceedCreateRoomEvent(RoomEventArgs e); + public EventResult OnFailedCreateRoomEvent(RoomEventArgs e); } public interface IQuitRoomEventHandler : IEventHandler { + public new delegate EventResult BeforeEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult AfterEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult SucceedEventHandler(object sender, RoomEventArgs e); + public new delegate EventResult FailedEventHandler(object sender, RoomEventArgs e); + public event BeforeEventHandler? BeforeQuitRoom; public event AfterEventHandler? AfterQuitRoom; public event SucceedEventHandler? SucceedQuitRoom; public event FailedEventHandler? FailedQuitRoom; - public EventResult OnBeforeQuitRoomEvent(GeneralEventArgs e); - public EventResult OnAfterQuitRoomEvent(GeneralEventArgs e); - public EventResult OnSucceedQuitRoomEvent(GeneralEventArgs e); - public EventResult OnFailedQuitRoomEvent(GeneralEventArgs e); + public EventResult OnBeforeQuitRoomEvent(RoomEventArgs e); + public EventResult OnAfterQuitRoomEvent(RoomEventArgs e); + public EventResult OnSucceedQuitRoomEvent(RoomEventArgs e); + public EventResult OnFailedQuitRoomEvent(RoomEventArgs e); } public interface IChangeRoomSettingEventHandler : IEventHandler diff --git a/FunGame.Core/Library/Common/Event/LoginEventArgs.cs b/FunGame.Core/Library/Common/Event/LoginEventArgs.cs new file mode 100644 index 0000000..25b12c6 --- /dev/null +++ b/FunGame.Core/Library/Common/Event/LoginEventArgs.cs @@ -0,0 +1,14 @@ +namespace Milimoe.FunGame.Core.Library.Common.Event +{ + public class LoginEventArgs : GeneralEventArgs + { + public string Username; + public string Password; + + public LoginEventArgs(string username = "", string password = "") + { + Username = username; + Password = password; + } + } +} diff --git a/FunGame.Core/Library/Common/Event/RoomEventArgs.cs b/FunGame.Core/Library/Common/Event/RoomEventArgs.cs new file mode 100644 index 0000000..485c6ee --- /dev/null +++ b/FunGame.Core/Library/Common/Event/RoomEventArgs.cs @@ -0,0 +1,12 @@ +namespace Milimoe.FunGame.Core.Library.Common.Event +{ + public class RoomEventArgs + { + public string RoomID { get; set; } = ""; + + public RoomEventArgs(string RoomID = "") + { + this.RoomID = RoomID; + } + } +} diff --git a/FunGame.Core/Library/Common/Event/SendTalkEventArgs.cs b/FunGame.Core/Library/Common/Event/SendTalkEventArgs.cs new file mode 100644 index 0000000..f4ab73a --- /dev/null +++ b/FunGame.Core/Library/Common/Event/SendTalkEventArgs.cs @@ -0,0 +1,12 @@ +namespace Milimoe.FunGame.Core.Library.Common.Event +{ + public class SendTalkEventArgs + { + public string Message { get; set; } = ""; + + public SendTalkEventArgs(string message = "") + { + this.Message = message; + } + } +} diff --git a/FunGame.Core/Library/Constant/TypeEnum.cs b/FunGame.Core/Library/Constant/TypeEnum.cs index 333da41..3f3534e 100644 --- a/FunGame.Core/Library/Constant/TypeEnum.cs +++ b/FunGame.Core/Library/Constant/TypeEnum.cs @@ -223,27 +223,37 @@ FiveStar } + public enum RunTimeInvokeType + { + None, + GetServerConnection, + Connect, + Connected, + Disconnect, + Disconnected, + Close + } + public enum MainInvokeType { None, + Connected, + Disconnected, + Disconnect, SetGreen, SetGreenAndPing, SetRed, SetYellow, WaitConnectAndSetYellow, WaitLoginAndSetYellow, - Disconnect, - Disconnected, LogOut, LogIn, SetUser, - Connected, - Connect, - GetServerConnection, - Close, IntoRoom, - Chat, - QuitRoom + QuitRoom, + UpdateRoom, + CreateRoom, + Chat } public enum RegInvokeType diff --git a/FunGame.Core/Library/Exception/Exception.cs b/FunGame.Core/Library/Exception/Exception.cs index 6d93d5f..d84449f 100644 --- a/FunGame.Core/Library/Exception/Exception.cs +++ b/FunGame.Core/Library/Exception/Exception.cs @@ -137,6 +137,16 @@ public class SocketCreateReceivingException : Exception { - public override string Message => "无法创建监听套接字 (#10027)"; + public override string Message => "无法创建监听套接字 (#10028)"; + } + + public class GetRoomListException : Exception + { + public override string Message => "获取房间列表失败 (#10029)"; + } + + public class QuitRoomException : Exception + { + public override string Message => "退出房间失败 (#10030)"; } } diff --git a/FunGame.Desktop/Controller/LoginController.cs b/FunGame.Desktop/Controller/LoginController.cs index bb7f797..2a6b035 100644 --- a/FunGame.Desktop/Controller/LoginController.cs +++ b/FunGame.Desktop/Controller/LoginController.cs @@ -23,12 +23,12 @@ namespace Milimoe.FunGame.Desktop.Controller public static bool LoginAccount(params object[]? objs) { - if (RunTime.Login?.OnBeforeLoginEvent(new GeneralEventArgs()) == Core.Library.Constant.EventResult.Fail) return false; + if (RunTime.Login?.OnBeforeLoginEvent(Login.EventArgs) == Core.Library.Constant.EventResult.Fail) return false; bool result = LoginModel.LoginAccount(objs); if (!result) { ShowMessage.ErrorMessage("登录失败!!", "登录失败", 5); - RunTime.Login?.OnFailedLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnFailedLoginEvent(Login.EventArgs); } return result; } @@ -39,7 +39,7 @@ namespace Milimoe.FunGame.Desktop.Controller if (!result) { ShowMessage.ErrorMessage("登录失败!!", "登录失败", 5); - RunTime.Login?.OnFailedLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnFailedLoginEvent(Login.EventArgs); } return result; } diff --git a/FunGame.Desktop/Controller/MainController.cs b/FunGame.Desktop/Controller/MainController.cs index dcbc4a1..57697b9 100644 --- a/FunGame.Desktop/Controller/MainController.cs +++ b/FunGame.Desktop/Controller/MainController.cs @@ -3,6 +3,7 @@ using Milimoe.FunGame.Core.Library.Common.Architecture; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.Model; using Milimoe.FunGame.Desktop.UI; +using Milimoe.FunGame.Desktop.Library; namespace Milimoe.FunGame.Desktop.Controller { @@ -38,14 +39,33 @@ namespace Milimoe.FunGame.Desktop.Controller break; case MainInvokeType.IntoRoom: - if (Main.OnBeforeIntoRoomEvent(new GeneralEventArgs()) == EventResult.Fail) return (T)result; - result = MainModel.IntoRoom(); + string roomid = new("-1"); + if (args != null && args.Length > 0) roomid = (string)args[0]; + if (Main.OnBeforeIntoRoomEvent(new RoomEventArgs(roomid)) == EventResult.Fail) return (T)result; + result = MainModel.IntoRoom(roomid); + break; + + case MainInvokeType.UpdateRoom: + result = MainModel.UpdateRoom(); + break; + + case MainInvokeType.QuitRoom: + roomid = new("-1"); + if (args != null && args.Length > 0) roomid = (string)args[0]; + if (Main.OnBeforeQuitRoomEvent(new RoomEventArgs(roomid)) == EventResult.Fail) return (T)result; + result = MainModel.QuitRoom(roomid); + break; + + case MainInvokeType.CreateRoom: + if (Main.OnBeforeCreateRoomEvent(new RoomEventArgs()) == EventResult.Fail) return (T)result; + result = MainModel.CreateRoom(); break; case MainInvokeType.Chat: - if (Main.OnBeforeSendTalkEvent(new GeneralEventArgs()) == EventResult.Fail) return (T)result; - if (args != null && args.Length > 0) - result = MainModel.Chat((string)args[0]); + string msg = ""; + if (args != null && args.Length > 0) msg = (string)args[0]; + if (Main.OnBeforeSendTalkEvent(new SendTalkEventArgs(msg)) == EventResult.Fail) return (T)result; + if (msg.Trim() != "") result = MainModel.Chat(msg); break; default: @@ -59,9 +79,24 @@ namespace Milimoe.FunGame.Desktop.Controller return Do(MainInvokeType.LogOut); } - public bool IntoRoom() + public bool UpdateRoom() { - return Do(MainInvokeType.IntoRoom); + return Do(MainInvokeType.UpdateRoom); + } + + public bool IntoRoom(string roomid) + { + return Do(MainInvokeType.IntoRoom, roomid); + } + + public bool QuitRoom(string roomid) + { + return Do(MainInvokeType.QuitRoom, roomid); + } + + public bool CreateRoom() + { + return Do(MainInvokeType.CreateRoom); } public bool Chat(string msg) diff --git a/FunGame.Desktop/Controller/RunTimeController.cs b/FunGame.Desktop/Controller/RunTimeController.cs index c6d99b2..4decc72 100644 --- a/FunGame.Desktop/Controller/RunTimeController.cs +++ b/FunGame.Desktop/Controller/RunTimeController.cs @@ -7,7 +7,7 @@ namespace Milimoe.FunGame.Desktop.Controller { public class RunTimeController { - public bool Connected => Do(MainInvokeType.Connected); + public bool Connected => Do(RunTimeInvokeType.Connected); private RunTimeModel RunTimeModel { get; } private Main Main { get; } @@ -21,16 +21,16 @@ namespace Milimoe.FunGame.Desktop.Controller /** * 从内部去调用Model的方法,并记录日志。 */ - private T Do(MainInvokeType DoType, params object[] args) + private T Do(RunTimeInvokeType DoType, params object[] args) { object result = new(); switch (DoType) { - case MainInvokeType.GetServerConnection: + case RunTimeInvokeType.GetServerConnection: result = RunTimeModel.GetServerConnection(); break; - case MainInvokeType.Connect: + case RunTimeInvokeType.Connect: result = RunTimeModel.Connect(); if ((ConnectResult)result != ConnectResult.Success) { @@ -39,19 +39,19 @@ namespace Milimoe.FunGame.Desktop.Controller } break; - case MainInvokeType.Connected: + case RunTimeInvokeType.Connected: result = RunTimeModel.Connected; break; - case MainInvokeType.Disconnect: + case RunTimeInvokeType.Disconnect: if (Main.OnBeforeDisconnectEvent(new GeneralEventArgs()) == EventResult.Fail) return (T)result; RunTimeModel.Disconnect(); break; - case MainInvokeType.Disconnected: + case RunTimeInvokeType.Disconnected: break; - case MainInvokeType.Close: + case RunTimeInvokeType.Close: if (args != null && args.Length > 0) { RunTimeModel.Error((Exception)args[0]); @@ -69,32 +69,32 @@ namespace Milimoe.FunGame.Desktop.Controller public bool GetServerConnection() { - return Do(MainInvokeType.GetServerConnection); + return Do(RunTimeInvokeType.GetServerConnection); } public ConnectResult Connect() { - return Do(MainInvokeType.Connect); + return Do(RunTimeInvokeType.Connect); } public void Disconnect() { - Do(MainInvokeType.Disconnect); + Do(RunTimeInvokeType.Disconnect); } public void Disconnected() { - Do(MainInvokeType.Disconnected); + Do(RunTimeInvokeType.Disconnected); } public bool Close() { - return Do(MainInvokeType.Close); + return Do(RunTimeInvokeType.Close); } public bool Error(Exception e) { - return Do(MainInvokeType.Close, e); + return Do(RunTimeInvokeType.Close, e); } } } diff --git a/FunGame.Desktop/Library/Base/BaseLogin.cs b/FunGame.Desktop/Library/Base/BaseLogin.cs index 55a7340..6807845 100644 --- a/FunGame.Desktop/Library/Base/BaseLogin.cs +++ b/FunGame.Desktop/Library/Base/BaseLogin.cs @@ -7,12 +7,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base { public class BaseLogin : GeneralForm, ILoginEventHandler { - public event IEventHandler.BeforeEventHandler? BeforeLogin; - public event IEventHandler.AfterEventHandler? AfterLogin; - public event IEventHandler.SucceedEventHandler? SucceedLogin; - public event IEventHandler.FailedEventHandler? FailedLogin; + public event ILoginEventHandler.BeforeEventHandler? BeforeLogin; + public event ILoginEventHandler.AfterEventHandler? AfterLogin; + public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; + public event ILoginEventHandler.FailedEventHandler? FailedLogin; - public EventResult OnAfterLoginEvent(GeneralEventArgs e) + public EventResult OnAfterLoginEvent(LoginEventArgs e) { if (AfterLogin != null) { @@ -21,7 +21,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnBeforeLoginEvent(GeneralEventArgs e) + public EventResult OnBeforeLoginEvent(LoginEventArgs e) { if (BeforeLogin != null) { @@ -30,7 +30,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedLoginEvent(GeneralEventArgs e) + public EventResult OnFailedLoginEvent(LoginEventArgs e) { if (FailedLogin != null) { @@ -39,7 +39,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedLoginEvent(GeneralEventArgs e) + public EventResult OnSucceedLoginEvent(LoginEventArgs e) { if (SucceedLogin != null) { diff --git a/FunGame.Desktop/Library/Base/BaseMain.cs b/FunGame.Desktop/Library/Base/BaseMain.cs index 63ba161..5089a9b 100644 --- a/FunGame.Desktop/Library/Base/BaseMain.cs +++ b/FunGame.Desktop/Library/Base/BaseMain.cs @@ -90,12 +90,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public event IEventHandler.BeforeEventHandler? BeforeLogin; - public event IEventHandler.AfterEventHandler? AfterLogin; - public event IEventHandler.SucceedEventHandler? SucceedLogin; - public event IEventHandler.FailedEventHandler? FailedLogin; + public event ILoginEventHandler.BeforeEventHandler? BeforeLogin; + public event ILoginEventHandler.AfterEventHandler? AfterLogin; + public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; + public event ILoginEventHandler.FailedEventHandler? FailedLogin; - public EventResult OnBeforeLoginEvent(GeneralEventArgs e) + public EventResult OnBeforeLoginEvent(LoginEventArgs e) { if (BeforeLogin != null) { @@ -104,7 +104,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnAfterLoginEvent(GeneralEventArgs e) + public EventResult OnAfterLoginEvent(LoginEventArgs e) { if (AfterLogin != null) { @@ -113,7 +113,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedLoginEvent(GeneralEventArgs e) + public EventResult OnSucceedLoginEvent(LoginEventArgs e) { if (SucceedLogin != null) { @@ -122,7 +122,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedLoginEvent(GeneralEventArgs e) + public EventResult OnFailedLoginEvent(LoginEventArgs e) { if (FailedLogin != null) { @@ -172,12 +172,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public event IEventHandler.BeforeEventHandler? BeforeIntoRoom; - public event IEventHandler.AfterEventHandler? AfterIntoRoom; - public event IEventHandler.SucceedEventHandler? SucceedIntoRoom; - public event IEventHandler.FailedEventHandler? FailedIntoRoom; + public event IIntoRoomEventHandler.BeforeEventHandler? BeforeIntoRoom; + public event IIntoRoomEventHandler.AfterEventHandler? AfterIntoRoom; + public event IIntoRoomEventHandler.SucceedEventHandler? SucceedIntoRoom; + public event IIntoRoomEventHandler.FailedEventHandler? FailedIntoRoom; - public EventResult OnBeforeIntoRoomEvent(GeneralEventArgs e) + public EventResult OnBeforeIntoRoomEvent(RoomEventArgs e) { if (BeforeIntoRoom != null) { @@ -186,7 +186,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnAfterIntoRoomEvent(GeneralEventArgs e) + public EventResult OnAfterIntoRoomEvent(RoomEventArgs e) { if (AfterIntoRoom != null) { @@ -195,7 +195,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedIntoRoomEvent(GeneralEventArgs e) + public EventResult OnSucceedIntoRoomEvent(RoomEventArgs e) { if (SucceedIntoRoom != null) { @@ -204,7 +204,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedIntoRoomEvent(GeneralEventArgs e) + public EventResult OnFailedIntoRoomEvent(RoomEventArgs e) { if (FailedIntoRoom != null) { @@ -213,12 +213,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public event IEventHandler.BeforeEventHandler? BeforeSendTalk; - public event IEventHandler.AfterEventHandler? AfterSendTalk; - public event IEventHandler.SucceedEventHandler? SucceedSendTalk; - public event IEventHandler.FailedEventHandler? FailedSendTalk; + public event ISendTalkEventHandler.BeforeEventHandler? BeforeSendTalk; + public event ISendTalkEventHandler.AfterEventHandler? AfterSendTalk; + public event ISendTalkEventHandler.SucceedEventHandler? SucceedSendTalk; + public event ISendTalkEventHandler.FailedEventHandler? FailedSendTalk; - public EventResult OnBeforeSendTalkEvent(GeneralEventArgs e) + public EventResult OnBeforeSendTalkEvent(SendTalkEventArgs e) { if (BeforeSendTalk != null) { @@ -227,7 +227,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnAfterSendTalkEvent(GeneralEventArgs e) + public EventResult OnAfterSendTalkEvent(SendTalkEventArgs e) { if (AfterSendTalk != null) { @@ -236,7 +236,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedSendTalkEvent(GeneralEventArgs e) + public EventResult OnSucceedSendTalkEvent(SendTalkEventArgs e) { if (SucceedSendTalk != null) { @@ -245,7 +245,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedSendTalkEvent(GeneralEventArgs e) + public EventResult OnFailedSendTalkEvent(SendTalkEventArgs e) { if (FailedSendTalk != null) { @@ -254,12 +254,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public event IEventHandler.BeforeEventHandler? BeforeCreateRoom; - public event IEventHandler.AfterEventHandler? AfterCreateRoom; - public event IEventHandler.SucceedEventHandler? SucceedCreateRoom; - public event IEventHandler.FailedEventHandler? FailedCreateRoom; + public event ICreateRoomEventHandler.BeforeEventHandler? BeforeCreateRoom; + public event ICreateRoomEventHandler.AfterEventHandler? AfterCreateRoom; + public event ICreateRoomEventHandler.SucceedEventHandler? SucceedCreateRoom; + public event ICreateRoomEventHandler.FailedEventHandler? FailedCreateRoom; - public EventResult OnBeforeCreateRoomEvent(GeneralEventArgs e) + public EventResult OnBeforeCreateRoomEvent(RoomEventArgs e) { if (BeforeCreateRoom != null) { @@ -268,7 +268,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnAfterCreateRoomEvent(GeneralEventArgs e) + public EventResult OnAfterCreateRoomEvent(RoomEventArgs e) { if (AfterCreateRoom != null) { @@ -277,7 +277,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedCreateRoomEvent(GeneralEventArgs e) + public EventResult OnSucceedCreateRoomEvent(RoomEventArgs e) { if (SucceedCreateRoom != null) { @@ -286,7 +286,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedCreateRoomEvent(GeneralEventArgs e) + public EventResult OnFailedCreateRoomEvent(RoomEventArgs e) { if (FailedCreateRoom != null) { @@ -295,12 +295,12 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public event IEventHandler.BeforeEventHandler? BeforeQuitRoom; - public event IEventHandler.AfterEventHandler? AfterQuitRoom; - public event IEventHandler.SucceedEventHandler? SucceedQuitRoom; - public event IEventHandler.FailedEventHandler? FailedQuitRoom; + public event IQuitRoomEventHandler.BeforeEventHandler? BeforeQuitRoom; + public event IQuitRoomEventHandler.AfterEventHandler? AfterQuitRoom; + public event IQuitRoomEventHandler.SucceedEventHandler? SucceedQuitRoom; + public event IQuitRoomEventHandler.FailedEventHandler? FailedQuitRoom; - public EventResult OnBeforeQuitRoomEvent(GeneralEventArgs e) + public EventResult OnBeforeQuitRoomEvent(RoomEventArgs e) { if (BeforeQuitRoom != null) { @@ -309,7 +309,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnAfterQuitRoomEvent(GeneralEventArgs e) + public EventResult OnAfterQuitRoomEvent(RoomEventArgs e) { if (AfterQuitRoom != null) { @@ -318,7 +318,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnSucceedQuitRoomEvent(GeneralEventArgs e) + public EventResult OnSucceedQuitRoomEvent(RoomEventArgs e) { if (SucceedQuitRoom != null) { @@ -327,7 +327,7 @@ namespace Milimoe.FunGame.Desktop.Library.Base else return EventResult.NoEventImplement; } - public EventResult OnFailedQuitRoomEvent(GeneralEventArgs e) + public EventResult OnFailedQuitRoomEvent(RoomEventArgs e) { if (FailedQuitRoom != null) { diff --git a/FunGame.Desktop/Library/Base/BaseReg.cs b/FunGame.Desktop/Library/Base/BaseReg.cs index 8f51b57..672b60c 100644 --- a/FunGame.Desktop/Library/Base/BaseReg.cs +++ b/FunGame.Desktop/Library/Base/BaseReg.cs @@ -7,15 +7,10 @@ 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 event IRegEventHandler.BeforeEventHandler? BeforeReg; + public event IRegEventHandler.AfterEventHandler? AfterReg; + public event IRegEventHandler.SucceedEventHandler? SucceedReg; + public event IRegEventHandler.FailedEventHandler? FailedReg; public EventResult OnAfterRegEvent(RegisterEventArgs e) { diff --git a/FunGame.Desktop/Model/LoginModel.cs b/FunGame.Desktop/Model/LoginModel.cs index c27a31f..2ea3f91 100644 --- a/FunGame.Desktop/Model/LoginModel.cs +++ b/FunGame.Desktop/Model/LoginModel.cs @@ -94,7 +94,7 @@ namespace Milimoe.FunGame.Desktop.Model return false; } - private void SocketHandler_Login(SocketObject SocketObject) + private static void SocketHandler_Login(SocketObject SocketObject) { Guid key = Guid.Empty; string? msg = ""; @@ -105,8 +105,8 @@ namespace Milimoe.FunGame.Desktop.Model if (msg != null && msg.Trim() != "") { ShowMessage.ErrorMessage(msg, "登录失败"); - RunTime.Login?.OnFailedLoginEvent(new GeneralEventArgs()); - RunTime.Login?.OnAfterLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnFailedLoginEvent(Login.EventArgs); + RunTime.Login?.OnAfterLoginEvent(Login.EventArgs); } else { @@ -118,13 +118,13 @@ namespace Milimoe.FunGame.Desktop.Model else { ShowMessage.ErrorMessage("登录失败!!", "登录失败", 5); - RunTime.Login?.OnFailedLoginEvent(new GeneralEventArgs()); - RunTime.Login?.OnAfterLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnFailedLoginEvent(Login.EventArgs); + RunTime.Login?.OnAfterLoginEvent(Login.EventArgs); } } } - private void SocketHandler_CheckLogin(SocketObject SocketObject) + private static void SocketHandler_CheckLogin(SocketObject SocketObject) { // 返回的objs是该Login的User对象的各个属性 object[] objs = SocketObject.Parameters; @@ -132,13 +132,13 @@ namespace Milimoe.FunGame.Desktop.Model { // 创建User对象并返回到Main RunTime.Main?.UpdateUI(MainInvokeType.SetUser, new object[] { Factory.New(objs) }); - RunTime.Login?.OnSucceedLoginEvent(new GeneralEventArgs()); - RunTime.Login?.OnAfterLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnSucceedLoginEvent(Login.EventArgs); + RunTime.Login?.OnAfterLoginEvent(Login.EventArgs); return; } ShowMessage.ErrorMessage("登录失败!!", "登录失败", 5); - RunTime.Login?.OnFailedLoginEvent(new GeneralEventArgs()); - RunTime.Login?.OnAfterLoginEvent(new GeneralEventArgs()); + RunTime.Login?.OnFailedLoginEvent(Login.EventArgs); + RunTime.Login?.OnAfterLoginEvent(Login.EventArgs); } } diff --git a/FunGame.Desktop/Model/MainModel.cs b/FunGame.Desktop/Model/MainModel.cs index 347b6b8..af19c94 100644 --- a/FunGame.Desktop/Model/MainModel.cs +++ b/FunGame.Desktop/Model/MainModel.cs @@ -12,6 +12,7 @@ namespace Milimoe.FunGame.Desktop.Model public class MainModel : BaseModel { private readonly Main Main; + private string LastSendTalkMessage = ""; public MainModel(Main main) : base(RunTime.Socket) { @@ -44,25 +45,78 @@ namespace Milimoe.FunGame.Desktop.Model return false; } - public bool IntoRoom() + public bool IntoRoom(string roomid) { try { - if (RunTime.Socket?.Send(SocketMessageType.IntoRoom, Config.FunGame_Roomid) == SocketResult.Success) + if (RunTime.Socket?.Send(SocketMessageType.IntoRoom, roomid) == SocketResult.Success) return true; else throw new CanNotIntoRoomException(); } catch (Exception e) { Main.GetMessage(e.GetErrorInfo()); - Main.OnFailedIntoRoomEvent(new GeneralEventArgs()); - Main.OnAfterIntoRoomEvent(new GeneralEventArgs()); + RoomEventArgs args = new(roomid); + Main.OnFailedIntoRoomEvent(args); + Main.OnAfterIntoRoomEvent(args); return false; } } + public bool UpdateRoom() + { + try + { + if (RunTime.Socket?.Send(SocketMessageType.UpdateRoom) == SocketResult.Success) + return true; + else throw new GetRoomListException(); + } + catch (Exception e) + { + Main.GetMessage(e.GetErrorInfo()); + return false; + } + } + + public bool QuitRoom(string roomid) + { + try + { + if (RunTime.Socket?.Send(SocketMessageType.QuitRoom, roomid) == SocketResult.Success) + return true; + else throw new QuitRoomException(); + } + catch (Exception e) + { + Main.GetMessage(e.GetErrorInfo()); + RoomEventArgs args = new(roomid); + Main.OnFailedQuitRoomEvent(args); + Main.OnAfterQuitRoomEvent(args); + return false; + } + } + + public bool CreateRoom() + { + try + { + if (RunTime.Socket?.Send(SocketMessageType.CreateRoom) == SocketResult.Success) + return true; + else throw new QuitRoomException(); + } + catch (Exception e) + { + Main.GetMessage(e.GetErrorInfo()); + RoomEventArgs args = new(); + Main.OnFailedCreateRoomEvent(args); + Main.OnAfterCreateRoomEvent(args); + return false; + } + } + public bool Chat(string msg) { + LastSendTalkMessage = msg; try { if (RunTime.Socket?.Send(SocketMessageType.Chat, msg) == SocketResult.Success) @@ -72,8 +126,9 @@ namespace Milimoe.FunGame.Desktop.Model catch (Exception e) { Main.GetMessage(e.GetErrorInfo()); - Main.OnFailedSendTalkEvent(new GeneralEventArgs()); - Main.OnAfterSendTalkEvent(new GeneralEventArgs()); + SendTalkEventArgs SendTalkEventArgs = new(LastSendTalkMessage); + Main.OnFailedSendTalkEvent(SendTalkEventArgs); + Main.OnAfterSendTalkEvent(SendTalkEventArgs); return false; } } @@ -161,12 +216,14 @@ namespace Milimoe.FunGame.Desktop.Model { Config.FunGame_Roomid = roomid; } - Main.OnSucceedIntoRoomEvent(new GeneralEventArgs()); - Main.OnAfterIntoRoomEvent(new GeneralEventArgs()); + RoomEventArgs args = new(roomid); + Main.OnSucceedIntoRoomEvent(args); + Main.OnAfterIntoRoomEvent(args); } private void SocketHandler_Chat(SocketObject SocketObject) { + SendTalkEventArgs SendTalkEventArgs = new(LastSendTalkMessage); if (SocketObject.Parameters != null && SocketObject.Length > 1) { string user = SocketObject.GetParam(0)!; @@ -175,12 +232,12 @@ namespace Milimoe.FunGame.Desktop.Model { Main.GetMessage(msg, TimeType.None); } - Main.OnSucceedSendTalkEvent(new GeneralEventArgs()); - Main.OnAfterSendTalkEvent(new GeneralEventArgs()); + Main.OnSucceedSendTalkEvent(SendTalkEventArgs); + Main.OnAfterSendTalkEvent(SendTalkEventArgs); return; } - Main.OnFailedSendTalkEvent(new GeneralEventArgs()); - Main.OnAfterSendTalkEvent(new GeneralEventArgs()); + Main.OnFailedSendTalkEvent(SendTalkEventArgs); + Main.OnAfterSendTalkEvent(SendTalkEventArgs); } #endregion diff --git a/FunGame.Desktop/UI/Login/Login.cs b/FunGame.Desktop/UI/Login/Login.cs index 0ea3a94..db809a9 100644 --- a/FunGame.Desktop/UI/Login/Login.cs +++ b/FunGame.Desktop/UI/Login/Login.cs @@ -11,6 +11,8 @@ namespace Milimoe.FunGame.Desktop.UI { public partial class Login : BaseLogin { + public static LoginEventArgs EventArgs { get; set; } = new LoginEventArgs(); + private readonly LoginController LoginController; public Login() @@ -46,6 +48,7 @@ namespace Milimoe.FunGame.Desktop.UI UsernameText.Focus(); return false; } + EventArgs = new LoginEventArgs(username, password); if (!LoginController.LoginAccount(username, password)) { ShowMessage.Message("登录失败!!", "登录失败"); @@ -86,7 +89,7 @@ namespace Milimoe.FunGame.Desktop.UI ShowMessage.TipMessage("暂不支持找回密码~"); } - public EventResult FailedLoginEvent(object sender, GeneralEventArgs e) + public EventResult FailedLoginEvent(object sender, LoginEventArgs e) { if (InvokeRequired) GoToLogin.Invoke(() => GoToLogin.Enabled = true); else GoToLogin.Enabled = true; @@ -94,7 +97,7 @@ namespace Milimoe.FunGame.Desktop.UI return EventResult.Success; } - private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e) + private EventResult SucceedLoginEvent(object sender, LoginEventArgs e) { if (!IsDisposed) { @@ -105,13 +108,13 @@ namespace Milimoe.FunGame.Desktop.UI return EventResult.Success; } - private EventResult BeforeLoginEvent(object sender, GeneralEventArgs e) + private EventResult BeforeLoginEvent(object sender, LoginEventArgs e) { if (RunTime.Main?.OnBeforeLoginEvent(e) == EventResult.Fail) return EventResult.Fail; return EventResult.Success; } - private EventResult AfterLoginEvent(object sender, GeneralEventArgs e) + private EventResult AfterLoginEvent(object sender, LoginEventArgs e) { RunTime.Main?.OnAfterLoginEvent(e); return EventResult.Success; diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs index 252a73b..55d60a2 100644 --- a/FunGame.Desktop/UI/Main/Main.cs +++ b/FunGame.Desktop/UI/Main/Main.cs @@ -190,7 +190,7 @@ namespace Milimoe.FunGame.Desktop.UI case MainInvokeType.SetUser: if (objs != null && objs.Length > 0) { - SetLoginUser(objs); + LoginAccount(objs); } break; @@ -316,18 +316,6 @@ namespace Milimoe.FunGame.Desktop.UI Room.Text = "暂未进入房间"; } - /// - /// 设置登录信息 - /// - /// - private void SetLoginUser(params object[]? objs) - { - if (InvokeRequired) - Invoke(LoginAccount, objs); - else - LoginAccount(objs); - } - /// /// 向消息队列输出换行符 /// @@ -626,7 +614,6 @@ namespace Milimoe.FunGame.Desktop.UI Login.Visible = false; Logout.Visible = true; UpdateUI(MainInvokeType.SetGreenAndPing); - Thread.Sleep(100); string welcome = $"欢迎回来, {Usercfg.LoginUserName}!"; ShowMessage.Message(welcome, "登录成功", 5); WritelnSystemInfo(welcome); @@ -812,7 +799,7 @@ namespace Milimoe.FunGame.Desktop.UI /// /// 关闭所有登录后才能访问的窗口 /// - private void CloseConnectedWindows() + private static void CloseConnectedWindows() { RunTime.Login?.Close(); RunTime.Register?.Close(); @@ -1219,7 +1206,7 @@ namespace Milimoe.FunGame.Desktop.UI private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e) { // 接入-1号房间聊天室 - if (MainController?.IntoRoom() ?? false) return EventResult.Success; + if (MainController?.IntoRoom("-1") ?? false) return EventResult.Success; else return EventResult.Fail; }