预留插件事件接口,添加插件加载方法 (#18)

This commit is contained in:
milimoe 2023-09-26 01:05:40 +08:00 committed by GitHub
parent 950ae5e467
commit ab2f2c6c3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 451 additions and 488 deletions

View File

@ -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)

View File

@ -161,9 +161,9 @@ namespace Milimoe.FunGame.Desktop.Controller
}
}
public async Task<string> CreateRoomAsync(string RoomType, string Password = "")
public async Task<Room> 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<string>("roomid") ?? "-1";
room = CreateRoomRequest.GetResult<Room>("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<bool> ChatAsync(string msg)

View File

@ -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,9 +79,18 @@ 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)
{

View File

@ -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<string>(WritelnSystemInfo),
new Func<DataRequestType, DataRequest>(NewDataRequest),
new Func<DataRequestType, DataRequest>(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)

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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<string, BasePlugin> 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;

View File

@ -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);
}
}
}

View File

@ -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
}
/// <summary>
/// 重复处理加入房间的方法
/// 加入房间的具体处理方法
/// </summary>
/// <param name="roomid"></param>
/// <returns></returns>
@ -504,20 +508,23 @@ namespace Milimoe.FunGame.Desktop.UI
if (CheckRoomIDExist(roomid))
{
if (Usercfg.InRoom.Roomid == "-1")
{
if (await MainController.GetRoomPlayerCountAsync(roomid) < 8)
{
if (ShowMessage(ShowMessageType.YesNo, "已找到房间 -> [ " + roomid + " ]\n是否加入", "已找到房间") == MessageResult.Yes)
{
Room r = GetRoom(roomid);
if (MainController != null && await MainController.IntoRoomAsync(r))
{
SetRoomid(r);
InRoom();
return true;
}
return await InvokeController_IntoRoom(r);
}
return false;
}
else
{
ShowMessage(ShowMessageType.Warning, "房间已满,拒绝加入!");
return false;
}
}
else
{
ShowMessage(ShowMessageType.Tip, "你需要先退出房间才可以加入新的房间。");
return false;
@ -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 + "房间失败!", "创建失败");
}
/// <summary>
@ -835,25 +835,6 @@ namespace Milimoe.FunGame.Desktop.UI
}
}
/// <summary>
/// 加载所有插件
/// </summary>
private void LoadPlugins()
{
try
{
PluginLoader.LoadPlugins(RunTime.Plugins);
foreach (KeyValuePair<string, BasePlugin> kv in RunTime.Plugins)
{
GetMessage("Load: " + kv.Value.Name);
}
}
catch (Exception e)
{
GetMessage(e.GetErrorInfo(), TimeType.None);
}
}
/// <summary>
/// 显示FunGame信息
/// </summary>
@ -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;
}
/// <summary>
@ -1263,7 +1244,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
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;
}
/// <summary>
@ -1285,7 +1265,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
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;
}
/// <summary>
@ -1303,10 +1282,54 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e)
private void SucceedLoginEvent(object sender, GeneralEventArgs e)
{
TaskUtility.StartAndAwaitTask(SucceedLoginEvent_Handler);
return EventResult.Success;
}
/// <summary>
/// 进入房间失败后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FailedIntoRoomEvent(object sender, RoomEventArgs e)
{
ShowMessage(ShowMessageType.Warning, "加入房间失败!");
}
/// <summary>
/// 成功进入房间后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SucceedIntoRoomEvent(object sender, RoomEventArgs e)
{
SetRoomid(e.Room);
InRoom();
}
/// <summary>
/// 创建房间失败后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FailedCreateRoomEvent(object sender, RoomEventArgs e)
{
ShowMessage(ShowMessageType.General, "创建" + e.RoomTypeString + "房间失败!", "创建失败");
}
/// <summary>
/// 成功创建房间后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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;
@ -1453,34 +1476,44 @@ namespace Milimoe.FunGame.Desktop.UI
/// </summary>
/// <returns></returns>
private void InvokeController_Connect()
{
try
{
ConnectEventArgs EventArgs = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port);
ConnectResult result = ConnectResult.CanNotConnect;
TaskUtility.StartAndAwaitTask(() =>
{
if (OnBeforeConnectEvent(EventArgs) == EventResult.Fail) return;
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(EventArgs);
else OnFailedConnectEvent(EventArgs);
OnAfterConnectEvent(EventArgs);
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 =>
{
GetMessage(e.GetErrorInfo(), TimeType.None);
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);
});
}
catch (Exception e)
{
GetMessage(e.GetErrorInfo(), TimeType.None);
}
}
/// <summary>
/// 断开服务器的连接,并处理事件
@ -1488,13 +1521,18 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns>
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);
}
}
/// <summary>
/// 发送聊天信息
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public async Task<bool> 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;
}
/// <summary>
/// 进入房间
/// </summary>
@ -1522,22 +1616,40 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns>
public async Task<bool> 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;
@ -1548,27 +1660,44 @@ namespace Milimoe.FunGame.Desktop.UI
/// </summary>
/// <param name="room"></param>
/// <returns></returns>
public async Task<string> InvokeController_CreateRoom(string RoomType, string Password = "")
public async Task<Room> 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;
}
/// <summary>
@ -1578,22 +1707,37 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns>
public async Task<bool> 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
/// <returns></returns>
public async Task<bool> 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;

View File

@ -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();