diff --git a/FunGame.Desktop/Controller/LoginController.cs b/FunGame.Desktop/Controller/LoginController.cs index 1c935e0..a8f1357 100644 --- a/FunGame.Desktop/Controller/LoginController.cs +++ b/FunGame.Desktop/Controller/LoginController.cs @@ -65,6 +65,7 @@ namespace Milimoe.FunGame.Desktop.Controller if (user.Id != 0) { // 创建User对象并返回到Main + args.Username = user.Username; RunTime.Session.LoginKey = key; RunTime.Main?.UpdateUI(MainInvokeType.SetUser, user); result = true; @@ -161,7 +162,8 @@ namespace Milimoe.FunGame.Desktop.Controller { if (UIForm.GetType() == typeof(Login)) { - return ((Login)UIForm).OnBeforeLoginEvent(LoginEventArgs) == EventResult.Success; + ((Login)UIForm).OnBeforeLoginEvent(UIForm, LoginEventArgs); + return !LoginEventArgs.Cancel; } return true; } @@ -173,13 +175,13 @@ namespace Milimoe.FunGame.Desktop.Controller if (UIForm.GetType() == typeof(Login)) { Login login = (Login)UIForm; - if (result) login.OnSucceedLoginEvent(LoginEventArgs); - else login.OnFailedLoginEvent(LoginEventArgs); - login.OnAfterLoginEvent(LoginEventArgs); + if (result) login.OnSucceedLoginEvent(UIForm, LoginEventArgs); + else login.OnFailedLoginEvent(UIForm, LoginEventArgs); + login.OnAfterLoginEvent(UIForm, LoginEventArgs); } else if (UIForm.GetType() == typeof(Main)) { - if (result) ((Main)UIForm).OnSucceedLoginEvent(LoginEventArgs); + if (result) ((Main)UIForm).OnSucceedLoginEvent(UIForm, LoginEventArgs); } } catch (Exception e) diff --git a/FunGame.Desktop/Controller/MainController.cs b/FunGame.Desktop/Controller/MainController.cs index 2f6a2b3..80c93ad 100644 --- a/FunGame.Desktop/Controller/MainController.cs +++ b/FunGame.Desktop/Controller/MainController.cs @@ -161,9 +161,9 @@ namespace Milimoe.FunGame.Desktop.Controller } } - public async Task CreateRoomAsync(string RoomType, string Password = "") + public async Task CreateRoomAsync(string RoomType, string Password = "") { - string roomid = "-1"; + Room room = General.HallInstance; try { @@ -173,7 +173,7 @@ namespace Milimoe.FunGame.Desktop.Controller await CreateRoomRequest.SendRequestAsync(); if (CreateRoomRequest.Result == RequestResult.Success) { - roomid = CreateRoomRequest.GetResult("roomid") ?? "-1"; + room = CreateRoomRequest.GetResult("room") ?? room; } } catch (Exception e) @@ -181,7 +181,7 @@ namespace Milimoe.FunGame.Desktop.Controller Main.GetMessage(e.GetErrorInfo(), TimeType.None); } - return roomid; + return room; } public async Task ChatAsync(string msg) diff --git a/FunGame.Desktop/Controller/RegisterController.cs b/FunGame.Desktop/Controller/RegisterController.cs index 64d4bd0..2070f0a 100644 --- a/FunGame.Desktop/Controller/RegisterController.cs +++ b/FunGame.Desktop/Controller/RegisterController.cs @@ -26,7 +26,9 @@ namespace Milimoe.FunGame.Desktop.Controller { password = password.Encrypt(username); RegisterEventArgs RegEventArgs = new(username, password, email); - if (Register.OnBeforeRegEvent(RegEventArgs) == EventResult.Fail) return false; + Register.OnBeforeRegEvent(Register, RegEventArgs); + RunTime.PluginLoader?.OnBeforeRegEvent(Register, RegEventArgs); + if (RegEventArgs.Cancel) return false; DataRequest request = RunTime.NewLongRunningDataRequest(DataRequestType.Reg_GetRegVerifyCode); request.AddRequestData("username", username); @@ -77,15 +79,24 @@ namespace Milimoe.FunGame.Desktop.Controller } request.Dispose(); - if (result) Register.OnSucceedRegEvent(RegEventArgs); - else Register.OnFailedRegEvent(RegEventArgs); - Register.OnAfterRegEvent(RegEventArgs); + if (result) + { + Register.OnSucceedRegEvent(Register, RegEventArgs); + RunTime.PluginLoader?.OnSucceedRegEvent(Register, RegEventArgs); + } + else + { + Register.OnFailedRegEvent(Register, RegEventArgs); + RunTime.PluginLoader?.OnFailedRegEvent(Register, RegEventArgs); + } + Register.OnAfterRegEvent(Register, RegEventArgs); + RunTime.PluginLoader?.OnAfterRegEvent(Register, RegEventArgs); } catch (Exception e) { RunTime.WritelnSystemInfo(e.GetErrorInfo()); } - + return result; } } diff --git a/FunGame.Desktop/Controller/RunTimeController.cs b/FunGame.Desktop/Controller/RunTimeController.cs index fc26d60..b8510d5 100644 --- a/FunGame.Desktop/Controller/RunTimeController.cs +++ b/FunGame.Desktop/Controller/RunTimeController.cs @@ -1,4 +1,6 @@ -using Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Api.Transmittal; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; @@ -21,16 +23,37 @@ namespace Milimoe.FunGame.Desktop.Controller LoginController = new(Main); } + public void LoadPlugins() + { + try + { + RunTime.PluginLoader = PluginLoader.LoadPlugins( + new Action(WritelnSystemInfo), + new Func(NewDataRequest), + new Func(NewLongRunningDataRequest), + RunTime.Session, RunTime.Config); + foreach (string name in RunTime.PluginLoader.Plugins.Keys) + { + Main.GetMessage("[ PluginLoader ] Load: " + name); + } + } + catch (Exception e) + { + Main.GetMessage(e.GetErrorInfo(), TimeType.None); + } + } + public override void WritelnSystemInfo(string msg) { - Main?.GetMessage(msg); + Main.GetMessage(msg); } public override void Error(Exception e) { Main.GetMessage(e.GetErrorInfo(), TimeType.None); Main.UpdateUI(MainInvokeType.Disconnected); - Main.OnFailedConnectEvent(new ConnectEventArgs(RunTime.Session.Server_IP, RunTime.Session.Server_Port)); + ConnectEventArgs args = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port, ConnectResult.ConnectFailed); + Main.OnFailedConnectEvent(Main, args); Close(); } @@ -122,8 +145,6 @@ namespace Milimoe.FunGame.Desktop.Controller Main.GetMessage(msg); Main.UpdateUI(MainInvokeType.Disconnect); Close(); - Main.OnSucceedDisconnectEvent(new GeneralEventArgs()); - Main.OnAfterDisconnectEvent(new GeneralEventArgs()); } protected override void SocketHandler_HeartBeat(SocketObject ServerMessage) diff --git a/FunGame.Desktop/Library/Base/BaseLogin.cs b/FunGame.Desktop/Library/Base/BaseLogin.cs index 6807845..7fec299 100644 --- a/FunGame.Desktop/Library/Base/BaseLogin.cs +++ b/FunGame.Desktop/Library/Base/BaseLogin.cs @@ -1,6 +1,5 @@ using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Library.Common.Event; -using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.Library.Component; namespace Milimoe.FunGame.Desktop.Library.Base @@ -12,40 +11,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; public event ILoginEventHandler.FailedEventHandler? FailedLogin; - public EventResult OnAfterLoginEvent(LoginEventArgs e) + public void OnAfterLoginEvent(object sender, LoginEventArgs e) { - if (AfterLogin != null) - { - return AfterLogin.Invoke(this, e); - } - else return EventResult.NoEventImplement; + AfterLogin?.Invoke(sender, e); } - public EventResult OnBeforeLoginEvent(LoginEventArgs e) + public void OnBeforeLoginEvent(object sender, LoginEventArgs e) { - if (BeforeLogin != null) - { - return BeforeLogin.Invoke(this, e); - } - else return EventResult.NoEventImplement; + BeforeLogin?.Invoke(sender, e); } - public EventResult OnFailedLoginEvent(LoginEventArgs e) + public void OnFailedLoginEvent(object sender, LoginEventArgs e) { - if (FailedLogin != null) - { - return FailedLogin.Invoke(this, e); - } - else return EventResult.NoEventImplement; + FailedLogin?.Invoke(sender, e); } - public EventResult OnSucceedLoginEvent(LoginEventArgs e) + public void OnSucceedLoginEvent(object sender, LoginEventArgs e) { - if (SucceedLogin != null) - { - return SucceedLogin.Invoke(this, e); - } - else return EventResult.NoEventImplement; + SucceedLogin?.Invoke(sender, e); } } } diff --git a/FunGame.Desktop/Library/Base/BaseMain.cs b/FunGame.Desktop/Library/Base/BaseMain.cs index 82fd39c..98246cc 100644 --- a/FunGame.Desktop/Library/Base/BaseMain.cs +++ b/FunGame.Desktop/Library/Base/BaseMain.cs @@ -1,6 +1,5 @@ using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Library.Common.Event; -using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.Library.Component; namespace Milimoe.FunGame.Desktop.Library.Base @@ -13,40 +12,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IConnectEventHandler.SucceedEventHandler? SucceedConnect; public event IConnectEventHandler.FailedEventHandler? FailedConnect; - public EventResult OnAfterConnectEvent(ConnectEventArgs e) + public void OnAfterConnectEvent(object sender, ConnectEventArgs e) { - if (AfterConnect != null) - { - return AfterConnect(this, e); - } - else return EventResult.NoEventImplement; + AfterConnect?.Invoke(sender, e); } - public EventResult OnBeforeConnectEvent(ConnectEventArgs e) + public void OnBeforeConnectEvent(object sender, ConnectEventArgs e) { - if (BeforeConnect != null) - { - return BeforeConnect(this, e); - } - else return EventResult.NoEventImplement; + BeforeConnect?.Invoke(sender, e); } - public EventResult OnSucceedConnectEvent(ConnectEventArgs e) + public void OnSucceedConnectEvent(object sender, ConnectEventArgs e) { - if (SucceedConnect != null) - { - return SucceedConnect(this, e); - } - else return EventResult.NoEventImplement; + SucceedConnect?.Invoke(sender, e); } - public EventResult OnFailedConnectEvent(ConnectEventArgs e) + public void OnFailedConnectEvent(object sender, ConnectEventArgs e) { - if (FailedConnect != null) - { - return FailedConnect(this, e); - } - else return EventResult.NoEventImplement; + FailedConnect?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeDisconnect; @@ -54,40 +37,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedDisconnect; public event IEventHandler.FailedEventHandler? FailedDisconnect; - public EventResult OnAfterDisconnectEvent(GeneralEventArgs e) + public void OnAfterDisconnectEvent(object sender, GeneralEventArgs e) { - if (AfterDisconnect != null) - { - return AfterDisconnect(this, e); - } - else return EventResult.NoEventImplement; + AfterDisconnect?.Invoke(sender, e); } - public EventResult OnBeforeDisconnectEvent(GeneralEventArgs e) + public void OnBeforeDisconnectEvent(object sender, GeneralEventArgs e) { - if (BeforeDisconnect != null) - { - return BeforeDisconnect(this, e); - } - else return EventResult.NoEventImplement; + BeforeDisconnect?.Invoke(sender, e); } - public EventResult OnFailedDisconnectEvent(GeneralEventArgs e) + public void OnFailedDisconnectEvent(object sender, GeneralEventArgs e) { - if (FailedDisconnect != null) - { - return FailedDisconnect(this, e); - } - else return EventResult.NoEventImplement; + FailedDisconnect?.Invoke(sender, e); } - public EventResult OnSucceedDisconnectEvent(GeneralEventArgs e) + public void OnSucceedDisconnectEvent(object sender, GeneralEventArgs e) { - if (SucceedDisconnect != null) - { - return SucceedDisconnect(this, e); - } - else return EventResult.NoEventImplement; + SucceedDisconnect?.Invoke(sender, e); } public event ILoginEventHandler.BeforeEventHandler? BeforeLogin; @@ -95,40 +62,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; public event ILoginEventHandler.FailedEventHandler? FailedLogin; - public EventResult OnBeforeLoginEvent(LoginEventArgs e) + public void OnBeforeLoginEvent(object sender, LoginEventArgs e) { - if (BeforeLogin != null) - { - return BeforeLogin(this, e); - } - else return EventResult.NoEventImplement; + BeforeLogin?.Invoke(sender, e); } - public EventResult OnAfterLoginEvent(LoginEventArgs e) + public void OnAfterLoginEvent(object sender, LoginEventArgs e) { - if (AfterLogin != null) - { - return AfterLogin(this, e); - } - else return EventResult.NoEventImplement; + AfterLogin?.Invoke(sender, e); } - public EventResult OnSucceedLoginEvent(LoginEventArgs e) + public void OnSucceedLoginEvent(object sender, LoginEventArgs e) { - if (SucceedLogin != null) - { - return SucceedLogin(this, e); - } - else return EventResult.NoEventImplement; + SucceedLogin?.Invoke(sender, e); } - public EventResult OnFailedLoginEvent(LoginEventArgs e) + public void OnFailedLoginEvent(object sender, LoginEventArgs e) { - if (FailedLogin != null) - { - return FailedLogin(this, e); - } - else return EventResult.NoEventImplement; + FailedLogin?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeLogout; @@ -136,40 +87,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedLogout; public event IEventHandler.FailedEventHandler? FailedLogout; - public EventResult OnAfterLogoutEvent(GeneralEventArgs e) + public void OnAfterLogoutEvent(object sender, GeneralEventArgs e) { - if (AfterLogout != null) - { - return AfterLogout(this, e); - } - else return EventResult.NoEventImplement; + AfterLogout?.Invoke(sender, e); } - public EventResult OnBeforeLogoutEvent(GeneralEventArgs e) + public void OnBeforeLogoutEvent(object sender, GeneralEventArgs e) { - if (BeforeLogout != null) - { - return BeforeLogout(this, e); - } - else return EventResult.NoEventImplement; + BeforeLogout?.Invoke(sender, e); } - public EventResult OnFailedLogoutEvent(GeneralEventArgs e) + public void OnFailedLogoutEvent(object sender, GeneralEventArgs e) { - if (FailedLogout != null) - { - return FailedLogout(this, e); - } - else return EventResult.NoEventImplement; + FailedLogout?.Invoke(sender, e); } - public EventResult OnSucceedLogoutEvent(GeneralEventArgs e) + public void OnSucceedLogoutEvent(object sender, GeneralEventArgs e) { - if (SucceedLogout != null) - { - return SucceedLogout(this, e); - } - else return EventResult.NoEventImplement; + SucceedLogout?.Invoke(sender, e); } public event IIntoRoomEventHandler.BeforeEventHandler? BeforeIntoRoom; @@ -177,40 +112,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IIntoRoomEventHandler.SucceedEventHandler? SucceedIntoRoom; public event IIntoRoomEventHandler.FailedEventHandler? FailedIntoRoom; - public EventResult OnBeforeIntoRoomEvent(RoomEventArgs e) + public void OnBeforeIntoRoomEvent(object sender, RoomEventArgs e) { - if (BeforeIntoRoom != null) - { - return BeforeIntoRoom(this, e); - } - else return EventResult.NoEventImplement; + BeforeIntoRoom?.Invoke(sender, e); } - public EventResult OnAfterIntoRoomEvent(RoomEventArgs e) + public void OnAfterIntoRoomEvent(object sender, RoomEventArgs e) { - if (AfterIntoRoom != null) - { - return AfterIntoRoom(this, e); - } - else return EventResult.NoEventImplement; + AfterIntoRoom?.Invoke(sender, e); } - public EventResult OnSucceedIntoRoomEvent(RoomEventArgs e) + public void OnSucceedIntoRoomEvent(object sender, RoomEventArgs e) { - if (SucceedIntoRoom != null) - { - return SucceedIntoRoom(this, e); - } - else return EventResult.NoEventImplement; + SucceedIntoRoom?.Invoke(sender, e); } - public EventResult OnFailedIntoRoomEvent(RoomEventArgs e) + public void OnFailedIntoRoomEvent(object sender, RoomEventArgs e) { - if (FailedIntoRoom != null) - { - return FailedIntoRoom(this, e); - } - else return EventResult.NoEventImplement; + FailedIntoRoom?.Invoke(sender, e); } public event ISendTalkEventHandler.BeforeEventHandler? BeforeSendTalk; @@ -218,40 +137,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event ISendTalkEventHandler.SucceedEventHandler? SucceedSendTalk; public event ISendTalkEventHandler.FailedEventHandler? FailedSendTalk; - public EventResult OnBeforeSendTalkEvent(SendTalkEventArgs e) + public void OnBeforeSendTalkEvent(object sender, SendTalkEventArgs e) { - if (BeforeSendTalk != null) - { - return BeforeSendTalk(this, e); - } - else return EventResult.NoEventImplement; + BeforeSendTalk?.Invoke(sender, e); } - public EventResult OnAfterSendTalkEvent(SendTalkEventArgs e) + public void OnAfterSendTalkEvent(object sender, SendTalkEventArgs e) { - if (AfterSendTalk != null) - { - return AfterSendTalk(this, e); - } - else return EventResult.NoEventImplement; + AfterSendTalk?.Invoke(sender, e); } - public EventResult OnSucceedSendTalkEvent(SendTalkEventArgs e) + public void OnSucceedSendTalkEvent(object sender, SendTalkEventArgs e) { - if (SucceedSendTalk != null) - { - return SucceedSendTalk(this, e); - } - else return EventResult.NoEventImplement; + SucceedSendTalk?.Invoke(sender, e); } - public EventResult OnFailedSendTalkEvent(SendTalkEventArgs e) + public void OnFailedSendTalkEvent(object sender, SendTalkEventArgs e) { - if (FailedSendTalk != null) - { - return FailedSendTalk(this, e); - } - else return EventResult.NoEventImplement; + FailedSendTalk?.Invoke(sender, e); } public event ICreateRoomEventHandler.BeforeEventHandler? BeforeCreateRoom; @@ -259,40 +162,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event ICreateRoomEventHandler.SucceedEventHandler? SucceedCreateRoom; public event ICreateRoomEventHandler.FailedEventHandler? FailedCreateRoom; - public EventResult OnBeforeCreateRoomEvent(RoomEventArgs e) + public void OnBeforeCreateRoomEvent(object sender, RoomEventArgs e) { - if (BeforeCreateRoom != null) - { - return BeforeCreateRoom(this, e); - } - else return EventResult.NoEventImplement; + BeforeCreateRoom?.Invoke(sender, e); } - public EventResult OnAfterCreateRoomEvent(RoomEventArgs e) + public void OnAfterCreateRoomEvent(object sender, RoomEventArgs e) { - if (AfterCreateRoom != null) - { - return AfterCreateRoom(this, e); - } - else return EventResult.NoEventImplement; + AfterCreateRoom?.Invoke(sender, e); } - public EventResult OnSucceedCreateRoomEvent(RoomEventArgs e) + public void OnSucceedCreateRoomEvent(object sender, RoomEventArgs e) { - if (SucceedCreateRoom != null) - { - return SucceedCreateRoom(this, e); - } - else return EventResult.NoEventImplement; + SucceedCreateRoom?.Invoke(sender, e); } - public EventResult OnFailedCreateRoomEvent(RoomEventArgs e) + public void OnFailedCreateRoomEvent(object sender, RoomEventArgs e) { - if (FailedCreateRoom != null) - { - return FailedCreateRoom(this, e); - } - else return EventResult.NoEventImplement; + FailedCreateRoom?.Invoke(sender, e); } public event IQuitRoomEventHandler.BeforeEventHandler? BeforeQuitRoom; @@ -300,40 +187,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IQuitRoomEventHandler.SucceedEventHandler? SucceedQuitRoom; public event IQuitRoomEventHandler.FailedEventHandler? FailedQuitRoom; - public EventResult OnBeforeQuitRoomEvent(RoomEventArgs e) + public void OnBeforeQuitRoomEvent(object sender, RoomEventArgs e) { - if (BeforeQuitRoom != null) - { - return BeforeQuitRoom(this, e); - } - else return EventResult.NoEventImplement; + BeforeQuitRoom?.Invoke(sender, e); } - public EventResult OnAfterQuitRoomEvent(RoomEventArgs e) + public void OnAfterQuitRoomEvent(object sender, RoomEventArgs e) { - if (AfterQuitRoom != null) - { - return AfterQuitRoom(this, e); - } - else return EventResult.NoEventImplement; + AfterQuitRoom?.Invoke(sender, e); } - public EventResult OnSucceedQuitRoomEvent(RoomEventArgs e) + public void OnSucceedQuitRoomEvent(object sender, RoomEventArgs e) { - if (SucceedQuitRoom != null) - { - return SucceedQuitRoom(this, e); - } - else return EventResult.NoEventImplement; + SucceedQuitRoom?.Invoke(sender, e); } - public EventResult OnFailedQuitRoomEvent(RoomEventArgs e) + public void OnFailedQuitRoomEvent(object sender, RoomEventArgs e) { - if (FailedQuitRoom != null) - { - return FailedQuitRoom(this, e); - } - else return EventResult.NoEventImplement; + FailedQuitRoom?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeStartMatch; @@ -341,40 +212,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedStartMatch; public event IEventHandler.FailedEventHandler? FailedStartMatch; - public EventResult OnBeforeStartMatchEvent(GeneralEventArgs e) + public void OnBeforeStartMatchEvent(object sender, GeneralEventArgs e) { - if (BeforeStartMatch != null) - { - return BeforeStartMatch(this, e); - } - else return EventResult.NoEventImplement; + BeforeStartMatch?.Invoke(sender, e); } - public EventResult OnAfterStartMatchEvent(GeneralEventArgs e) + public void OnAfterStartMatchEvent(object sender, GeneralEventArgs e) { - if (AfterStartMatch != null) - { - return AfterStartMatch(this, e); - } - else return EventResult.NoEventImplement; + AfterStartMatch?.Invoke(sender, e); } - public EventResult OnSucceedStartMatchEvent(GeneralEventArgs e) + public void OnSucceedStartMatchEvent(object sender, GeneralEventArgs e) { - if (SucceedStartMatch != null) - { - return SucceedStartMatch(this, e); - } - else return EventResult.NoEventImplement; + SucceedStartMatch?.Invoke(sender, e); } - public EventResult OnFailedStartMatchEvent(GeneralEventArgs e) + public void OnFailedStartMatchEvent(object sender, GeneralEventArgs e) { - if (FailedStartMatch != null) - { - return FailedStartMatch(this, e); - } - else return EventResult.NoEventImplement; + FailedStartMatch?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeStartGame; @@ -382,40 +237,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedStartGame; public event IEventHandler.FailedEventHandler? FailedStartGame; - public EventResult OnBeforeStartGameEvent(GeneralEventArgs e) + public void OnBeforeStartGameEvent(object sender, GeneralEventArgs e) { - if (BeforeStartGame != null) - { - return BeforeStartGame(this, e); - } - else return EventResult.NoEventImplement; + BeforeStartGame?.Invoke(sender, e); } - public EventResult OnAfterStartGameEvent(GeneralEventArgs e) + public void OnAfterStartGameEvent(object sender, GeneralEventArgs e) { - if (AfterStartGame != null) - { - return AfterStartGame(this, e); - } - else return EventResult.NoEventImplement; + AfterStartGame?.Invoke(sender, e); } - public EventResult OnSucceedStartGameEvent(GeneralEventArgs e) + public void OnSucceedStartGameEvent(object sender, GeneralEventArgs e) { - if (SucceedStartGame != null) - { - return SucceedStartGame(this, e); - } - else return EventResult.NoEventImplement; + SucceedStartGame?.Invoke(sender, e); } - public EventResult OnFailedStartGameEvent(GeneralEventArgs e) + public void OnFailedStartGameEvent(object sender, GeneralEventArgs e) { - if (FailedStartGame != null) - { - return FailedStartGame(this, e); - } - else return EventResult.NoEventImplement; + FailedStartGame?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeOpenInventory; @@ -423,40 +262,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedOpenInventory; public event IEventHandler.FailedEventHandler? FailedOpenInventory; - public EventResult OnBeforeOpenInventoryEvent(GeneralEventArgs e) + public void OnBeforeOpenInventoryEvent(object sender, GeneralEventArgs e) { - if (BeforeOpenInventory != null) - { - return BeforeOpenInventory(this, e); - } - else return EventResult.NoEventImplement; + BeforeOpenInventory?.Invoke(sender, e); } - public EventResult OnAfterOpenInventoryEvent(GeneralEventArgs e) + public void OnAfterOpenInventoryEvent(object sender, GeneralEventArgs e) { - if (AfterOpenInventory != null) - { - return AfterOpenInventory(this, e); - } - else return EventResult.NoEventImplement; + AfterOpenInventory?.Invoke(sender, e); } - public EventResult OnSucceedOpenInventoryEvent(GeneralEventArgs e) + public void OnSucceedOpenInventoryEvent(object sender, GeneralEventArgs e) { - if (SucceedOpenInventory != null) - { - return SucceedOpenInventory(this, e); - } - else return EventResult.NoEventImplement; + SucceedOpenInventory?.Invoke(sender, e); } - public EventResult OnFailedOpenInventoryEvent(GeneralEventArgs e) + public void OnFailedOpenInventoryEvent(object sender, GeneralEventArgs e) { - if (FailedOpenInventory != null) - { - return FailedOpenInventory(this, e); - } - else return EventResult.NoEventImplement; + FailedOpenInventory?.Invoke(sender, e); } public event IEventHandler.BeforeEventHandler? BeforeOpenStore; @@ -464,40 +287,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IEventHandler.SucceedEventHandler? SucceedOpenStore; public event IEventHandler.FailedEventHandler? FailedOpenStore; - public EventResult OnBeforeOpenStoreEvent(GeneralEventArgs e) + public void OnBeforeOpenStoreEvent(object sender, GeneralEventArgs e) { - if (BeforeOpenStore != null) - { - return BeforeOpenStore(this, e); - } - else return EventResult.NoEventImplement; + BeforeOpenStore?.Invoke(sender, e); } - public EventResult OnAfterOpenStoreEvent(GeneralEventArgs e) + public void OnAfterOpenStoreEvent(object sender, GeneralEventArgs e) { - if (AfterOpenStore != null) - { - return AfterOpenStore(this, e); - } - else return EventResult.NoEventImplement; + AfterOpenStore?.Invoke(sender, e); } - public EventResult OnSucceedOpenStoreEvent(GeneralEventArgs e) + public void OnSucceedOpenStoreEvent(object sender, GeneralEventArgs e) { - if (SucceedOpenStore != null) - { - return SucceedOpenStore(this, e); - } - else return EventResult.NoEventImplement; + SucceedOpenStore?.Invoke(sender, e); } - public EventResult OnFailedOpenStoreEvent(GeneralEventArgs e) + public void OnFailedOpenStoreEvent(object sender, GeneralEventArgs e) { - if (FailedOpenStore != null) - { - return FailedOpenStore(this, e); - } - else return EventResult.NoEventImplement; + FailedOpenStore?.Invoke(sender, e); } } } diff --git a/FunGame.Desktop/Library/Base/BaseReg.cs b/FunGame.Desktop/Library/Base/BaseReg.cs index 672b60c..b1dcd6e 100644 --- a/FunGame.Desktop/Library/Base/BaseReg.cs +++ b/FunGame.Desktop/Library/Base/BaseReg.cs @@ -1,6 +1,5 @@ using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Library.Common.Event; -using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.Library.Component; namespace Milimoe.FunGame.Desktop.Library.Base @@ -12,40 +11,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base public event IRegEventHandler.SucceedEventHandler? SucceedReg; public event IRegEventHandler.FailedEventHandler? FailedReg; - public EventResult OnAfterRegEvent(RegisterEventArgs e) + public void OnAfterRegEvent(object sender, RegisterEventArgs e) { - if (AfterReg != null) - { - return AfterReg(this, e); - } - else return EventResult.NoEventImplement; + AfterReg?.Invoke(sender, e); } - public EventResult OnBeforeRegEvent(RegisterEventArgs e) + public void OnBeforeRegEvent(object sender, RegisterEventArgs e) { - if (BeforeReg != null) - { - return BeforeReg(this, e); - } - else return EventResult.NoEventImplement; + BeforeReg?.Invoke(sender, e); } - public EventResult OnFailedRegEvent(RegisterEventArgs e) + public void OnFailedRegEvent(object sender, RegisterEventArgs e) { - if (FailedReg != null) - { - return FailedReg(this, e); - } - else return EventResult.NoEventImplement; + FailedReg?.Invoke(sender, e); } - public EventResult OnSucceedRegEvent(RegisterEventArgs e) + public void OnSucceedRegEvent(object sender, RegisterEventArgs e) { - if (SucceedReg != null) - { - return SucceedReg(this, e); - } - else return EventResult.NoEventImplement; + SucceedReg?.Invoke(sender, e); } } } diff --git a/FunGame.Desktop/Library/Component/GeneralForm.cs b/FunGame.Desktop/Library/Component/GeneralForm.cs index a5747c3..a5e3063 100644 --- a/FunGame.Desktop/Library/Component/GeneralForm.cs +++ b/FunGame.Desktop/Library/Component/GeneralForm.cs @@ -79,7 +79,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component return input; } - + /// /// 提供公共方法给Controller发送消息弹窗(这样可以防止跨线程时,弹窗不在最上层) /// 支持返回点击的按钮,用于判断是否取消输入 diff --git a/FunGame.Desktop/Library/Component/ShowMessage.cs b/FunGame.Desktop/Library/Component/ShowMessage.cs index f510928..caa1055 100644 --- a/FunGame.Desktop/Library/Component/ShowMessage.cs +++ b/FunGame.Desktop/Library/Component/ShowMessage.cs @@ -159,7 +159,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component public static MessageResult Message(string msg, string title, int autoclose = 0) { - object[] objs = { title, msg, autoclose, MessageButtonType.OK, BUTTON_OK}; + object[] objs = { title, msg, autoclose, MessageButtonType.OK, BUTTON_OK }; MessageResult result = new ShowMessage(objs).MessageResult; return result; } @@ -212,7 +212,7 @@ 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 }; diff --git a/FunGame.Desktop/Model/RunTime.cs b/FunGame.Desktop/Model/RunTime.cs index f325e71..bab2271 100644 --- a/FunGame.Desktop/Model/RunTime.cs +++ b/FunGame.Desktop/Model/RunTime.cs @@ -1,5 +1,4 @@ using Milimoe.FunGame.Core.Api.Transmittal; -using Milimoe.FunGame.Core.Library.Common.Plugin; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Desktop.Model @@ -12,7 +11,7 @@ namespace Milimoe.FunGame.Desktop.Model public static Core.Model.RoomList RoomList { get; } = new(); public static Core.Model.Session Session { get; } = new(); public static Core.Model.FunGameConfig Config { get; } = new(); - public static Dictionary Plugins { get; } = new(); + public static Core.Api.Utility.PluginLoader? PluginLoader { get; set; } = null; public static Core.Library.Common.Network.Socket? Socket { get; set; } = null; public static Controller.RunTimeController? Controller { get; set; } = null; public static UI.Main? Main { get; set; } = null; diff --git a/FunGame.Desktop/UI/Login/Login.cs b/FunGame.Desktop/UI/Login/Login.cs index 224cb1f..29c70b8 100644 --- a/FunGame.Desktop/UI/Login/Login.cs +++ b/FunGame.Desktop/UI/Login/Login.cs @@ -85,29 +85,30 @@ namespace Milimoe.FunGame.Desktop.UI UsernameText.Focus(); } - public EventResult FailedLoginEvent(object sender, LoginEventArgs e) + public void FailedLoginEvent(object sender, LoginEventArgs e) { GoToLogin.Enabled = true; - RunTime.Main?.OnFailedLoginEvent(e); - return EventResult.Success; + RunTime.Main?.OnFailedLoginEvent(sender, e); + RunTime.PluginLoader?.OnFailedLoginEvent(sender, e); } - private EventResult SucceedLoginEvent(object sender, LoginEventArgs e) + private void SucceedLoginEvent(object sender, LoginEventArgs e) { - RunTime.Main?.OnSucceedLoginEvent(e); - return EventResult.Success; + RunTime.Main?.OnSucceedLoginEvent(sender, e); + RunTime.PluginLoader?.OnSucceedLoginEvent(sender, e); } - private EventResult BeforeLoginEvent(object sender, LoginEventArgs e) + private void BeforeLoginEvent(object sender, LoginEventArgs e) { - if (RunTime.Main?.OnBeforeLoginEvent(e) == EventResult.Fail) return EventResult.Fail; - return EventResult.Success; + RunTime.Main?.OnBeforeLoginEvent(sender, e); + RunTime.PluginLoader?.OnBeforeLoginEvent(sender, e); + if (e.Cancel) return; } - private EventResult AfterLoginEvent(object sender, LoginEventArgs e) + private void AfterLoginEvent(object sender, LoginEventArgs e) { - RunTime.Main?.OnAfterLoginEvent(e); - return EventResult.Success; + RunTime.Main?.OnAfterLoginEvent(sender, e); + RunTime.PluginLoader?.OnAfterLoginEvent(sender, e); } } } diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs index 83f0b30..096cb54 100644 --- a/FunGame.Desktop/UI/Main/Main.cs +++ b/FunGame.Desktop/UI/Main/Main.cs @@ -66,7 +66,7 @@ namespace Milimoe.FunGame.Desktop.UI } } // 加载插件 - LoadPlugins(); + RunTime.Controller.LoadPlugins(); // 自动连接服务器 if (Config.FunGame_isAutoConnect) InvokeController_Connect(); }); @@ -82,6 +82,10 @@ namespace Milimoe.FunGame.Desktop.UI FailedConnect += FailedConnectEvent; SucceedConnect += SucceedConnectEvent; SucceedLogin += SucceedLoginEvent; + SucceedIntoRoom += SucceedIntoRoomEvent; + FailedIntoRoom += FailedIntoRoomEvent; + SucceedCreateRoom += SucceedCreateRoomEvent; + FailedCreateRoom += FailedCreateRoomEvent; } #endregion @@ -492,7 +496,7 @@ namespace Milimoe.FunGame.Desktop.UI } /// - /// 重复处理加入房间的方法 + /// 加入房间的具体处理方法 /// /// /// @@ -505,17 +509,20 @@ namespace Milimoe.FunGame.Desktop.UI { if (Usercfg.InRoom.Roomid == "-1") { - if (ShowMessage(ShowMessageType.YesNo, "已找到房间 -> [ " + roomid + " ]\n是否加入?", "已找到房间") == MessageResult.Yes) + if (await MainController.GetRoomPlayerCountAsync(roomid) < 8) { - Room r = GetRoom(roomid); - if (MainController != null && await MainController.IntoRoomAsync(r)) + if (ShowMessage(ShowMessageType.YesNo, "已找到房间 -> [ " + roomid + " ]\n是否加入?", "已找到房间") == MessageResult.Yes) { - SetRoomid(r); - InRoom(); - return true; + Room r = GetRoom(roomid); + return await InvokeController_IntoRoom(r); } + return false; + } + else + { + ShowMessage(ShowMessageType.Warning, "房间已满,拒绝加入!"); + return false; } - return false; } else { @@ -719,7 +726,7 @@ namespace Milimoe.FunGame.Desktop.UI { TaskUtility.StartAndAwaitTask(async () => { - if (!await MainController.ChatAsync(" [ " + Usercfg.LoginUserName + " ] 说: " + text)) + if (!await InvokeController_SendTalk(" [ " + Usercfg.LoginUserName + " ] 说: " + text)) { WritelnGameInfo("联网消息发送失败。"); } @@ -748,20 +755,13 @@ namespace Milimoe.FunGame.Desktop.UI ShowMessage(ShowMessageType.Warning, "已在房间中,无法创建房间。"); return; } - string roomid = await InvokeController_CreateRoom(RoomType, Password); - if (MainController is not null && roomid != "-1") + Room room = await InvokeController_CreateRoom(RoomType, Password); + if (MainController is not null && room.Roomid != "-1") { await MainController.UpdateRoomAsync(); - Room r = GetRoom(roomid); - await InvokeController_IntoRoom(r); - SetRoomid(r); - InRoom(); - WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 创建" + RoomType + "房间"); - WritelnGameInfo(">> 创建" + RoomType + "房间成功!房间号: " + roomid); - ShowMessage(ShowMessageType.General, "创建" + RoomType + "房间成功!\n房间号是 -> [ " + roomid + " ]", "创建成功"); + await InvokeController_IntoRoom(room); return; } - ShowMessage(ShowMessageType.General, "创建" + RoomType + "房间失败!", "创建失败"); } /// @@ -835,25 +835,6 @@ namespace Milimoe.FunGame.Desktop.UI } } - /// - /// 加载所有插件 - /// - private void LoadPlugins() - { - try - { - PluginLoader.LoadPlugins(RunTime.Plugins); - foreach (KeyValuePair kv in RunTime.Plugins) - { - GetMessage("Load: " + kv.Value.Name); - } - } - catch (Exception e) - { - GetMessage(e.GetErrorInfo(), TimeType.None); - } - } - /// /// 显示FunGame信息 /// @@ -1112,13 +1093,13 @@ namespace Milimoe.FunGame.Desktop.UI bool IsMix = CheckMix.Checked; bool IsTeam = CheckTeam.Checked; bool IsHasPass = CheckHasPass.Checked; - if (IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_All; - else if (IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_AllHasPass; - else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_Mix; - else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_MixHasPass; - else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_Team; - else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_TeamHasPass; - else Config.FunGame_GameMode = GameMode.GameMode_All; + if (IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.All; + else if (IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.AllHasPass; + else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Mix; + else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.MixHasPass; + else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Team; + else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.TeamHasPass; + else Config.FunGame_GameMode = GameMode.All; } /// @@ -1263,7 +1244,7 @@ namespace Milimoe.FunGame.Desktop.UI /// /// /// - public EventResult FailedConnectEvent(object sender, GeneralEventArgs e) + public void FailedConnectEvent(object sender, GeneralEventArgs e) { // 自动重连 if (Config.FunGame_isConnected && Config.FunGame_isAutoRetry && CurrentRetryTimes <= MaxRetryTimes) @@ -1276,7 +1257,6 @@ namespace Milimoe.FunGame.Desktop.UI GetMessage("连接服务器失败,5秒后自动尝试重连。"); } else GetMessage("无法连接至服务器,请检查你的网络连接。"); - return EventResult.Success; } /// @@ -1285,7 +1265,7 @@ namespace Milimoe.FunGame.Desktop.UI /// /// /// - public EventResult SucceedConnectEvent(object sender, GeneralEventArgs e) + public void SucceedConnectEvent(object sender, GeneralEventArgs e) { // 创建MainController MainController = new MainController(this); @@ -1294,7 +1274,6 @@ namespace Milimoe.FunGame.Desktop.UI // 自动登录 RunTime.Controller?.AutoLogin(Config.FunGame_AutoLoginUser, Config.FunGame_AutoLoginPassword, Config.FunGame_AutoLoginKey); } - return EventResult.Success; } /// @@ -1303,10 +1282,54 @@ namespace Milimoe.FunGame.Desktop.UI /// /// /// - private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e) + private void SucceedLoginEvent(object sender, GeneralEventArgs e) { TaskUtility.StartAndAwaitTask(SucceedLoginEvent_Handler); - return EventResult.Success; + } + + /// + /// 进入房间失败后触发事件 + /// + /// + /// + private void FailedIntoRoomEvent(object sender, RoomEventArgs e) + { + ShowMessage(ShowMessageType.Warning, "加入房间失败!"); + } + + /// + /// 成功进入房间后触发事件 + /// + /// + /// + private void SucceedIntoRoomEvent(object sender, RoomEventArgs e) + { + SetRoomid(e.Room); + InRoom(); + } + + /// + /// 创建房间失败后触发事件 + /// + /// + /// + private void FailedCreateRoomEvent(object sender, RoomEventArgs e) + { + ShowMessage(ShowMessageType.General, "创建" + e.RoomTypeString + "房间失败!", "创建失败"); + } + + /// + /// 成功创建房间后触发事件 + /// + /// + /// + private void SucceedCreateRoomEvent(object sender, RoomEventArgs e) + { + SetRoomid(e.Room); + InRoom(); + WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 创建" + e.RoomTypeString + "房间"); + WritelnGameInfo(">> 创建" + e.RoomTypeString + "房间成功!房间号: " + e.RoomID); + ShowMessage(ShowMessageType.General, "创建" + e.RoomTypeString + "房间成功!\n房间号是 -> [ " + e.RoomID + " ]", "创建成功"); } #endregion @@ -1351,10 +1374,10 @@ namespace Milimoe.FunGame.Desktop.UI GameInfo.Clear(); break; case Constant.FunGame_CreateMix: - TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.GameMode_Mix)); + TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.Mix)); break; case Constant.FunGame_CreateTeam: - TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.GameMode_Team)); + TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.Team)); break; case Constant.FunGame_StartGame: break; @@ -1454,32 +1477,42 @@ namespace Milimoe.FunGame.Desktop.UI /// private void InvokeController_Connect() { - try - { - ConnectEventArgs EventArgs = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port); - ConnectResult result = ConnectResult.CanNotConnect; + ConnectEventArgs EventArgs = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port); - TaskUtility.StartAndAwaitTask(() => - { - if (OnBeforeConnectEvent(EventArgs) == EventResult.Fail) return; - result = RunTime.Controller?.Connect(RunTime.Session.Server_IP, RunTime.Session.Server_Port) ?? result; - EventArgs.ConnectResult = result; - }).OnCompleted(() => - { - if (result == ConnectResult.Success) OnSucceedConnectEvent(EventArgs); - else OnFailedConnectEvent(EventArgs); - OnAfterConnectEvent(EventArgs); - }).OnError(e => - { - GetMessage(e.GetErrorInfo(), TimeType.None); - UpdateUI(MainInvokeType.SetRed); - Config.FunGame_isRetrying = false; - }); - } - catch (Exception e) + ConnectResult result = ConnectResult.CanNotConnect; + + TaskUtility.StartAndAwaitTask(() => { - GetMessage(e.GetErrorInfo(), TimeType.None); - } + OnBeforeConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnBeforeConnectEvent(this, EventArgs); + if (EventArgs.Cancel) return; + result = RunTime.Controller?.Connect(RunTime.Session.Server_IP, RunTime.Session.Server_Port) ?? result; + EventArgs.ConnectResult = result; + }).OnCompleted(() => + { + if (result == ConnectResult.Success) + { + OnSucceedConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedConnectEvent(this, EventArgs); + } + else + { + OnFailedConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedConnectEvent(this, EventArgs); + } + OnAfterConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterConnectEvent(this, EventArgs); + }).OnError(e => + { + EventArgs.ConnectResult = ConnectResult.ConnectFailed; + GetMessage(e.InnerException?.ToString() ?? e.ToString(), TimeType.None); + UpdateUI(MainInvokeType.SetRed); + Config.FunGame_isRetrying = false; + OnFailedConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedConnectEvent(this, EventArgs); + OnAfterConnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterConnectEvent(this, EventArgs); + }); } /// @@ -1488,13 +1521,18 @@ namespace Milimoe.FunGame.Desktop.UI /// public void InvokeController_Disconnect() { + GeneralEventArgs EventArgs = new(); + try { bool result = false; TaskUtility.StartAndAwaitTask(async () => { - if (OnBeforeDisconnectEvent(new GeneralEventArgs()) == EventResult.Fail) return; + OnBeforeDisconnectEvent(this, EventArgs); + if (EventArgs.Cancel) return; + RunTime.PluginLoader?.OnBeforeDisconnectEvent(this, EventArgs); + if (EventArgs.Cancel) return; if (Usercfg.LoginUser.Id != 0) { @@ -1504,17 +1542,73 @@ namespace Milimoe.FunGame.Desktop.UI result = RunTime.Controller?.Disconnect() ?? false; }).OnCompleted(() => { - if (result) OnSucceedDisconnectEvent(new GeneralEventArgs()); - else OnFailedDisconnectEvent(new GeneralEventArgs()); - OnAfterDisconnectEvent(new GeneralEventArgs()); + if (result) + { + OnSucceedDisconnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedDisconnectEvent(this, EventArgs); + } + else + { + OnFailedDisconnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedDisconnectEvent(this, EventArgs); + } + OnAfterDisconnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterDisconnectEvent(this, EventArgs); }); } catch (Exception e) { GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedDisconnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedDisconnectEvent(this, EventArgs); + OnAfterDisconnectEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterDisconnectEvent(this, EventArgs); } } + /// + /// 发送聊天信息 + /// + /// + /// + public async Task InvokeController_SendTalk(string msg) + { + SendTalkEventArgs EventArgs = new(msg); + bool result = false; + + try + { + OnBeforeSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnBeforeSendTalkEvent(this, EventArgs); + if (EventArgs.Cancel) return result; + + result = MainController is not null && await MainController.ChatAsync(msg); + + if (result) + { + OnSucceedSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedSendTalkEvent(this, EventArgs); + } + else + { + OnFailedSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedSendTalkEvent(this, EventArgs); + } + OnAfterSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterSendTalkEvent(this, EventArgs); + } + catch (Exception e) + { + GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedSendTalkEvent(this, EventArgs); + OnAfterSendTalkEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterSendTalkEvent(this, EventArgs); + } + + return result; + } + /// /// 进入房间 /// @@ -1522,53 +1616,88 @@ namespace Milimoe.FunGame.Desktop.UI /// public async Task InvokeController_IntoRoom(Room room) { + RoomEventArgs EventArgs = new(room); bool result = false; try { - RoomEventArgs EventArgs = new(room); - if (OnBeforeIntoRoomEvent(EventArgs) == EventResult.Fail) return result; + OnBeforeIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnBeforeIntoRoomEvent(this, EventArgs); + if (EventArgs.Cancel) return result; result = MainController is not null && await MainController.IntoRoomAsync(room); - if (result) OnSucceedIntoRoomEvent(EventArgs); - else OnFailedIntoRoomEvent(EventArgs); - OnAfterIntoRoomEvent(EventArgs); + if (room.Roomid != "-1") + { + if (result) + { + OnSucceedIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedIntoRoomEvent(this, EventArgs); + } + else + { + OnFailedIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedIntoRoomEvent(this, EventArgs); + } + OnAfterIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterIntoRoomEvent(this, EventArgs); + } } catch (Exception e) { GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedIntoRoomEvent(this, EventArgs); + OnAfterIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterIntoRoomEvent(this, EventArgs); } return result; } - + /// /// 创建房间 /// /// /// - public async Task InvokeController_CreateRoom(string RoomType, string Password = "") + public async Task InvokeController_CreateRoom(string RoomType, string Password = "") { - string roomid = "-1"; + RoomEventArgs EventArgs = new(RoomType, Password); + Room room = General.HallInstance; try { - RoomEventArgs EventArgs = new(RoomType, Password); - if (OnBeforeCreateRoomEvent(EventArgs) == EventResult.Fail) return roomid; + OnBeforeCreateRoomEvent(this, EventArgs); + if (EventArgs.Cancel) return room; + RunTime.PluginLoader?.OnBeforeCreateRoomEvent(this, EventArgs); + if (EventArgs.Cancel) return room; - roomid = MainController is null ? "-1" : await MainController.CreateRoomAsync(RoomType, Password); + room = MainController is null ? room : await MainController.CreateRoomAsync(RoomType, Password); - if (roomid != "-1") OnSucceedCreateRoomEvent(EventArgs); - else OnFailedCreateRoomEvent(EventArgs); - OnAfterCreateRoomEvent(EventArgs); + if (room.Roomid != "-1") + { + EventArgs = new(room); + OnSucceedCreateRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedCreateRoomEvent(this, EventArgs); + } + else + { + OnFailedCreateRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedCreateRoomEvent(this, EventArgs); + } + OnAfterCreateRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterCreateRoomEvent(this, EventArgs); } catch (Exception e) { GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedCreateRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedCreateRoomEvent(this, EventArgs); + OnAfterCreateRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterCreateRoomEvent(this, EventArgs); } - return roomid; + return room; } /// @@ -1578,22 +1707,37 @@ namespace Milimoe.FunGame.Desktop.UI /// public async Task InvokeController_QuitRoom(Room room, bool isMaster) { + RoomEventArgs EventArgs = new(room); bool result = false; try { - RoomEventArgs EventArgs = new(room); - if (OnBeforeIntoRoomEvent(EventArgs) == EventResult.Fail) return result; + OnBeforeIntoRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnBeforeIntoRoomEvent(this, EventArgs); + if (EventArgs.Cancel) return result; result = MainController is not null && await MainController.QuitRoomAsync(room.Roomid, isMaster); - if (result) OnSucceedIntoRoomEvent(EventArgs); - else OnFailedIntoRoomEvent(EventArgs); - OnAfterIntoRoomEvent(EventArgs); + if (result) + { + OnSucceedQuitRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedQuitRoomEvent(this, EventArgs); + } + else + { + OnFailedQuitRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedQuitRoomEvent(this, EventArgs); + } + OnAfterQuitRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterQuitRoomEvent(this, EventArgs); } catch (Exception e) { GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedQuitRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedQuitRoomEvent(this, EventArgs); + OnAfterQuitRoomEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterQuitRoomEvent(this, EventArgs); } return result; @@ -1605,31 +1749,45 @@ namespace Milimoe.FunGame.Desktop.UI /// public async Task LogOut() { + GeneralEventArgs EventArgs = new(); bool result = false; try { - GeneralEventArgs EventArgs = new(); - if (OnBeforeLogoutEvent(EventArgs) == EventResult.Fail) return result; + OnBeforeLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnBeforeLogoutEvent(this, EventArgs); + if (EventArgs.Cancel) return result; if (Usercfg.LoginUser.Id == 0) return result; if (Usercfg.InRoom.Roomid != "-1") { - string roomid = Usercfg.InRoom.Roomid; bool isMaster = Usercfg.InRoom.RoomMaster?.Id == Usercfg.LoginUser?.Id; - MainController?.QuitRoomAsync(roomid, isMaster); + await InvokeController_QuitRoom(Usercfg.InRoom, isMaster); } result = MainController is not null && await MainController.LogOutAsync(); - if (result) OnSucceedLogoutEvent(EventArgs); - else OnFailedLogoutEvent(EventArgs); - OnAfterLogoutEvent(EventArgs); + if (result) + { + OnSucceedLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnSucceedLogoutEvent(this, EventArgs); + } + else + { + OnFailedLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedLogoutEvent(this, EventArgs); + } + OnAfterLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterLogoutEvent(this, EventArgs); } catch (Exception e) { GetMessage(e.GetErrorInfo(), TimeType.None); + OnFailedLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnFailedLogoutEvent(this, EventArgs); + OnAfterLogoutEvent(this, EventArgs); + RunTime.PluginLoader?.OnAfterLogoutEvent(this, EventArgs); } return result; diff --git a/FunGame.Desktop/UI/Register/Register.cs b/FunGame.Desktop/UI/Register/Register.cs index 30513c8..bb8aa81 100644 --- a/FunGame.Desktop/UI/Register/Register.cs +++ b/FunGame.Desktop/UI/Register/Register.cs @@ -1,6 +1,5 @@ using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Library.Common.Event; -using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Desktop.Controller; using Milimoe.FunGame.Desktop.Library; @@ -112,19 +111,18 @@ namespace Milimoe.FunGame.Desktop.UI Dispose(); } - private EventResult SucceedRegEvent(object sender, GeneralEventArgs e) + private void SucceedRegEvent(object sender, GeneralEventArgs e) { string username = ((RegisterEventArgs)e).Username; string password = ((RegisterEventArgs)e).Password; TaskUtility.StartAndAwaitTask(async () => await LoginController.LoginAccountAsync(username, password, encrypt: false)); RunTime.Login?.Close(); - return EventResult.Success; } private void RegButton_Click(object sender, EventArgs e) { RegButton.Enabled = false; - TaskUtility.StartAndAwaitTask(async() => + TaskUtility.StartAndAwaitTask(async () => { if (!await Reg_Handler()) RegButton.Enabled = true; else Close();