预留插件事件接口,添加插件加载方法 (#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) if (user.Id != 0)
{ {
// 创建User对象并返回到Main // 创建User对象并返回到Main
args.Username = user.Username;
RunTime.Session.LoginKey = key; RunTime.Session.LoginKey = key;
RunTime.Main?.UpdateUI(MainInvokeType.SetUser, user); RunTime.Main?.UpdateUI(MainInvokeType.SetUser, user);
result = true; result = true;
@ -161,7 +162,8 @@ namespace Milimoe.FunGame.Desktop.Controller
{ {
if (UIForm.GetType() == typeof(Login)) if (UIForm.GetType() == typeof(Login))
{ {
return ((Login)UIForm).OnBeforeLoginEvent(LoginEventArgs) == EventResult.Success; ((Login)UIForm).OnBeforeLoginEvent(UIForm, LoginEventArgs);
return !LoginEventArgs.Cancel;
} }
return true; return true;
} }
@ -173,13 +175,13 @@ namespace Milimoe.FunGame.Desktop.Controller
if (UIForm.GetType() == typeof(Login)) if (UIForm.GetType() == typeof(Login))
{ {
Login login = (Login)UIForm; Login login = (Login)UIForm;
if (result) login.OnSucceedLoginEvent(LoginEventArgs); if (result) login.OnSucceedLoginEvent(UIForm, LoginEventArgs);
else login.OnFailedLoginEvent(LoginEventArgs); else login.OnFailedLoginEvent(UIForm, LoginEventArgs);
login.OnAfterLoginEvent(LoginEventArgs); login.OnAfterLoginEvent(UIForm, LoginEventArgs);
} }
else if (UIForm.GetType() == typeof(Main)) else if (UIForm.GetType() == typeof(Main))
{ {
if (result) ((Main)UIForm).OnSucceedLoginEvent(LoginEventArgs); if (result) ((Main)UIForm).OnSucceedLoginEvent(UIForm, LoginEventArgs);
} }
} }
catch (Exception e) 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 try
{ {
@ -173,7 +173,7 @@ namespace Milimoe.FunGame.Desktop.Controller
await CreateRoomRequest.SendRequestAsync(); await CreateRoomRequest.SendRequestAsync();
if (CreateRoomRequest.Result == RequestResult.Success) if (CreateRoomRequest.Result == RequestResult.Success)
{ {
roomid = CreateRoomRequest.GetResult<string>("roomid") ?? "-1"; room = CreateRoomRequest.GetResult<Room>("room") ?? room;
} }
} }
catch (Exception e) catch (Exception e)
@ -181,7 +181,7 @@ namespace Milimoe.FunGame.Desktop.Controller
Main.GetMessage(e.GetErrorInfo(), TimeType.None); Main.GetMessage(e.GetErrorInfo(), TimeType.None);
} }
return roomid; return room;
} }
public async Task<bool> ChatAsync(string msg) public async Task<bool> ChatAsync(string msg)

View File

@ -26,7 +26,9 @@ namespace Milimoe.FunGame.Desktop.Controller
{ {
password = password.Encrypt(username); password = password.Encrypt(username);
RegisterEventArgs RegEventArgs = new(username, password, email); 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); DataRequest request = RunTime.NewLongRunningDataRequest(DataRequestType.Reg_GetRegVerifyCode);
request.AddRequestData("username", username); request.AddRequestData("username", username);
@ -77,15 +79,24 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
request.Dispose(); request.Dispose();
if (result) Register.OnSucceedRegEvent(RegEventArgs); if (result)
else Register.OnFailedRegEvent(RegEventArgs); {
Register.OnAfterRegEvent(RegEventArgs); 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) catch (Exception e)
{ {
RunTime.WritelnSystemInfo(e.GetErrorInfo()); RunTime.WritelnSystemInfo(e.GetErrorInfo());
} }
return result; return result;
} }
} }

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.Event;
using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
@ -21,16 +23,37 @@ namespace Milimoe.FunGame.Desktop.Controller
LoginController = new(Main); 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) public override void WritelnSystemInfo(string msg)
{ {
Main?.GetMessage(msg); Main.GetMessage(msg);
} }
public override void Error(Exception e) public override void Error(Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); Main.GetMessage(e.GetErrorInfo(), TimeType.None);
Main.UpdateUI(MainInvokeType.Disconnected); 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(); Close();
} }
@ -122,8 +145,6 @@ namespace Milimoe.FunGame.Desktop.Controller
Main.GetMessage(msg); Main.GetMessage(msg);
Main.UpdateUI(MainInvokeType.Disconnect); Main.UpdateUI(MainInvokeType.Disconnect);
Close(); Close();
Main.OnSucceedDisconnectEvent(new GeneralEventArgs());
Main.OnAfterDisconnectEvent(new GeneralEventArgs());
} }
protected override void SocketHandler_HeartBeat(SocketObject ServerMessage) protected override void SocketHandler_HeartBeat(SocketObject ServerMessage)

View File

@ -1,6 +1,5 @@
using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Interface;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Desktop.Library.Component; using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.Library.Base namespace Milimoe.FunGame.Desktop.Library.Base
@ -12,40 +11,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; public event ILoginEventHandler.SucceedEventHandler? SucceedLogin;
public event ILoginEventHandler.FailedEventHandler? FailedLogin; public event ILoginEventHandler.FailedEventHandler? FailedLogin;
public EventResult OnAfterLoginEvent(LoginEventArgs e) public void OnAfterLoginEvent(object sender, LoginEventArgs e)
{ {
if (AfterLogin != null) AfterLogin?.Invoke(sender, e);
{
return AfterLogin.Invoke(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnBeforeLoginEvent(LoginEventArgs e) public void OnBeforeLoginEvent(object sender, LoginEventArgs e)
{ {
if (BeforeLogin != null) BeforeLogin?.Invoke(sender, e);
{
return BeforeLogin.Invoke(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedLoginEvent(LoginEventArgs e) public void OnFailedLoginEvent(object sender, LoginEventArgs e)
{ {
if (FailedLogin != null) FailedLogin?.Invoke(sender, e);
{
return FailedLogin.Invoke(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedLoginEvent(LoginEventArgs e) public void OnSucceedLoginEvent(object sender, LoginEventArgs e)
{ {
if (SucceedLogin != null) SucceedLogin?.Invoke(sender, e);
{
return SucceedLogin.Invoke(this, e);
}
else return EventResult.NoEventImplement;
} }
} }
} }

View File

@ -1,6 +1,5 @@
using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Interface;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Desktop.Library.Component; using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.Library.Base namespace Milimoe.FunGame.Desktop.Library.Base
@ -13,40 +12,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IConnectEventHandler.SucceedEventHandler? SucceedConnect; public event IConnectEventHandler.SucceedEventHandler? SucceedConnect;
public event IConnectEventHandler.FailedEventHandler? FailedConnect; public event IConnectEventHandler.FailedEventHandler? FailedConnect;
public EventResult OnAfterConnectEvent(ConnectEventArgs e) public void OnAfterConnectEvent(object sender, ConnectEventArgs e)
{ {
if (AfterConnect != null) AfterConnect?.Invoke(sender, e);
{
return AfterConnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnBeforeConnectEvent(ConnectEventArgs e) public void OnBeforeConnectEvent(object sender, ConnectEventArgs e)
{ {
if (BeforeConnect != null) BeforeConnect?.Invoke(sender, e);
{
return BeforeConnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedConnectEvent(ConnectEventArgs e) public void OnSucceedConnectEvent(object sender, ConnectEventArgs e)
{ {
if (SucceedConnect != null) SucceedConnect?.Invoke(sender, e);
{
return SucceedConnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedConnectEvent(ConnectEventArgs e) public void OnFailedConnectEvent(object sender, ConnectEventArgs e)
{ {
if (FailedConnect != null) FailedConnect?.Invoke(sender, e);
{
return FailedConnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeDisconnect; public event IEventHandler.BeforeEventHandler? BeforeDisconnect;
@ -54,40 +37,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedDisconnect; public event IEventHandler.SucceedEventHandler? SucceedDisconnect;
public event IEventHandler.FailedEventHandler? FailedDisconnect; public event IEventHandler.FailedEventHandler? FailedDisconnect;
public EventResult OnAfterDisconnectEvent(GeneralEventArgs e) public void OnAfterDisconnectEvent(object sender, GeneralEventArgs e)
{ {
if (AfterDisconnect != null) AfterDisconnect?.Invoke(sender, e);
{
return AfterDisconnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnBeforeDisconnectEvent(GeneralEventArgs e) public void OnBeforeDisconnectEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeDisconnect != null) BeforeDisconnect?.Invoke(sender, e);
{
return BeforeDisconnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedDisconnectEvent(GeneralEventArgs e) public void OnFailedDisconnectEvent(object sender, GeneralEventArgs e)
{ {
if (FailedDisconnect != null) FailedDisconnect?.Invoke(sender, e);
{
return FailedDisconnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedDisconnectEvent(GeneralEventArgs e) public void OnSucceedDisconnectEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedDisconnect != null) SucceedDisconnect?.Invoke(sender, e);
{
return SucceedDisconnect(this, e);
}
else return EventResult.NoEventImplement;
} }
public event ILoginEventHandler.BeforeEventHandler? BeforeLogin; public event ILoginEventHandler.BeforeEventHandler? BeforeLogin;
@ -95,40 +62,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event ILoginEventHandler.SucceedEventHandler? SucceedLogin; public event ILoginEventHandler.SucceedEventHandler? SucceedLogin;
public event ILoginEventHandler.FailedEventHandler? FailedLogin; public event ILoginEventHandler.FailedEventHandler? FailedLogin;
public EventResult OnBeforeLoginEvent(LoginEventArgs e) public void OnBeforeLoginEvent(object sender, LoginEventArgs e)
{ {
if (BeforeLogin != null) BeforeLogin?.Invoke(sender, e);
{
return BeforeLogin(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterLoginEvent(LoginEventArgs e) public void OnAfterLoginEvent(object sender, LoginEventArgs e)
{ {
if (AfterLogin != null) AfterLogin?.Invoke(sender, e);
{
return AfterLogin(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedLoginEvent(LoginEventArgs e) public void OnSucceedLoginEvent(object sender, LoginEventArgs e)
{ {
if (SucceedLogin != null) SucceedLogin?.Invoke(sender, e);
{
return SucceedLogin(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedLoginEvent(LoginEventArgs e) public void OnFailedLoginEvent(object sender, LoginEventArgs e)
{ {
if (FailedLogin != null) FailedLogin?.Invoke(sender, e);
{
return FailedLogin(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeLogout; public event IEventHandler.BeforeEventHandler? BeforeLogout;
@ -136,40 +87,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedLogout; public event IEventHandler.SucceedEventHandler? SucceedLogout;
public event IEventHandler.FailedEventHandler? FailedLogout; public event IEventHandler.FailedEventHandler? FailedLogout;
public EventResult OnAfterLogoutEvent(GeneralEventArgs e) public void OnAfterLogoutEvent(object sender, GeneralEventArgs e)
{ {
if (AfterLogout != null) AfterLogout?.Invoke(sender, e);
{
return AfterLogout(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnBeforeLogoutEvent(GeneralEventArgs e) public void OnBeforeLogoutEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeLogout != null) BeforeLogout?.Invoke(sender, e);
{
return BeforeLogout(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedLogoutEvent(GeneralEventArgs e) public void OnFailedLogoutEvent(object sender, GeneralEventArgs e)
{ {
if (FailedLogout != null) FailedLogout?.Invoke(sender, e);
{
return FailedLogout(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedLogoutEvent(GeneralEventArgs e) public void OnSucceedLogoutEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedLogout != null) SucceedLogout?.Invoke(sender, e);
{
return SucceedLogout(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IIntoRoomEventHandler.BeforeEventHandler? BeforeIntoRoom; public event IIntoRoomEventHandler.BeforeEventHandler? BeforeIntoRoom;
@ -177,40 +112,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IIntoRoomEventHandler.SucceedEventHandler? SucceedIntoRoom; public event IIntoRoomEventHandler.SucceedEventHandler? SucceedIntoRoom;
public event IIntoRoomEventHandler.FailedEventHandler? FailedIntoRoom; public event IIntoRoomEventHandler.FailedEventHandler? FailedIntoRoom;
public EventResult OnBeforeIntoRoomEvent(RoomEventArgs e) public void OnBeforeIntoRoomEvent(object sender, RoomEventArgs e)
{ {
if (BeforeIntoRoom != null) BeforeIntoRoom?.Invoke(sender, e);
{
return BeforeIntoRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterIntoRoomEvent(RoomEventArgs e) public void OnAfterIntoRoomEvent(object sender, RoomEventArgs e)
{ {
if (AfterIntoRoom != null) AfterIntoRoom?.Invoke(sender, e);
{
return AfterIntoRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedIntoRoomEvent(RoomEventArgs e) public void OnSucceedIntoRoomEvent(object sender, RoomEventArgs e)
{ {
if (SucceedIntoRoom != null) SucceedIntoRoom?.Invoke(sender, e);
{
return SucceedIntoRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedIntoRoomEvent(RoomEventArgs e) public void OnFailedIntoRoomEvent(object sender, RoomEventArgs e)
{ {
if (FailedIntoRoom != null) FailedIntoRoom?.Invoke(sender, e);
{
return FailedIntoRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public event ISendTalkEventHandler.BeforeEventHandler? BeforeSendTalk; public event ISendTalkEventHandler.BeforeEventHandler? BeforeSendTalk;
@ -218,40 +137,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event ISendTalkEventHandler.SucceedEventHandler? SucceedSendTalk; public event ISendTalkEventHandler.SucceedEventHandler? SucceedSendTalk;
public event ISendTalkEventHandler.FailedEventHandler? FailedSendTalk; public event ISendTalkEventHandler.FailedEventHandler? FailedSendTalk;
public EventResult OnBeforeSendTalkEvent(SendTalkEventArgs e) public void OnBeforeSendTalkEvent(object sender, SendTalkEventArgs e)
{ {
if (BeforeSendTalk != null) BeforeSendTalk?.Invoke(sender, e);
{
return BeforeSendTalk(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterSendTalkEvent(SendTalkEventArgs e) public void OnAfterSendTalkEvent(object sender, SendTalkEventArgs e)
{ {
if (AfterSendTalk != null) AfterSendTalk?.Invoke(sender, e);
{
return AfterSendTalk(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedSendTalkEvent(SendTalkEventArgs e) public void OnSucceedSendTalkEvent(object sender, SendTalkEventArgs e)
{ {
if (SucceedSendTalk != null) SucceedSendTalk?.Invoke(sender, e);
{
return SucceedSendTalk(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedSendTalkEvent(SendTalkEventArgs e) public void OnFailedSendTalkEvent(object sender, SendTalkEventArgs e)
{ {
if (FailedSendTalk != null) FailedSendTalk?.Invoke(sender, e);
{
return FailedSendTalk(this, e);
}
else return EventResult.NoEventImplement;
} }
public event ICreateRoomEventHandler.BeforeEventHandler? BeforeCreateRoom; public event ICreateRoomEventHandler.BeforeEventHandler? BeforeCreateRoom;
@ -259,40 +162,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event ICreateRoomEventHandler.SucceedEventHandler? SucceedCreateRoom; public event ICreateRoomEventHandler.SucceedEventHandler? SucceedCreateRoom;
public event ICreateRoomEventHandler.FailedEventHandler? FailedCreateRoom; public event ICreateRoomEventHandler.FailedEventHandler? FailedCreateRoom;
public EventResult OnBeforeCreateRoomEvent(RoomEventArgs e) public void OnBeforeCreateRoomEvent(object sender, RoomEventArgs e)
{ {
if (BeforeCreateRoom != null) BeforeCreateRoom?.Invoke(sender, e);
{
return BeforeCreateRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterCreateRoomEvent(RoomEventArgs e) public void OnAfterCreateRoomEvent(object sender, RoomEventArgs e)
{ {
if (AfterCreateRoom != null) AfterCreateRoom?.Invoke(sender, e);
{
return AfterCreateRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedCreateRoomEvent(RoomEventArgs e) public void OnSucceedCreateRoomEvent(object sender, RoomEventArgs e)
{ {
if (SucceedCreateRoom != null) SucceedCreateRoom?.Invoke(sender, e);
{
return SucceedCreateRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedCreateRoomEvent(RoomEventArgs e) public void OnFailedCreateRoomEvent(object sender, RoomEventArgs e)
{ {
if (FailedCreateRoom != null) FailedCreateRoom?.Invoke(sender, e);
{
return FailedCreateRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IQuitRoomEventHandler.BeforeEventHandler? BeforeQuitRoom; public event IQuitRoomEventHandler.BeforeEventHandler? BeforeQuitRoom;
@ -300,40 +187,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IQuitRoomEventHandler.SucceedEventHandler? SucceedQuitRoom; public event IQuitRoomEventHandler.SucceedEventHandler? SucceedQuitRoom;
public event IQuitRoomEventHandler.FailedEventHandler? FailedQuitRoom; public event IQuitRoomEventHandler.FailedEventHandler? FailedQuitRoom;
public EventResult OnBeforeQuitRoomEvent(RoomEventArgs e) public void OnBeforeQuitRoomEvent(object sender, RoomEventArgs e)
{ {
if (BeforeQuitRoom != null) BeforeQuitRoom?.Invoke(sender, e);
{
return BeforeQuitRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterQuitRoomEvent(RoomEventArgs e) public void OnAfterQuitRoomEvent(object sender, RoomEventArgs e)
{ {
if (AfterQuitRoom != null) AfterQuitRoom?.Invoke(sender, e);
{
return AfterQuitRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedQuitRoomEvent(RoomEventArgs e) public void OnSucceedQuitRoomEvent(object sender, RoomEventArgs e)
{ {
if (SucceedQuitRoom != null) SucceedQuitRoom?.Invoke(sender, e);
{
return SucceedQuitRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedQuitRoomEvent(RoomEventArgs e) public void OnFailedQuitRoomEvent(object sender, RoomEventArgs e)
{ {
if (FailedQuitRoom != null) FailedQuitRoom?.Invoke(sender, e);
{
return FailedQuitRoom(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeStartMatch; public event IEventHandler.BeforeEventHandler? BeforeStartMatch;
@ -341,40 +212,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedStartMatch; public event IEventHandler.SucceedEventHandler? SucceedStartMatch;
public event IEventHandler.FailedEventHandler? FailedStartMatch; public event IEventHandler.FailedEventHandler? FailedStartMatch;
public EventResult OnBeforeStartMatchEvent(GeneralEventArgs e) public void OnBeforeStartMatchEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeStartMatch != null) BeforeStartMatch?.Invoke(sender, e);
{
return BeforeStartMatch(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterStartMatchEvent(GeneralEventArgs e) public void OnAfterStartMatchEvent(object sender, GeneralEventArgs e)
{ {
if (AfterStartMatch != null) AfterStartMatch?.Invoke(sender, e);
{
return AfterStartMatch(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedStartMatchEvent(GeneralEventArgs e) public void OnSucceedStartMatchEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedStartMatch != null) SucceedStartMatch?.Invoke(sender, e);
{
return SucceedStartMatch(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedStartMatchEvent(GeneralEventArgs e) public void OnFailedStartMatchEvent(object sender, GeneralEventArgs e)
{ {
if (FailedStartMatch != null) FailedStartMatch?.Invoke(sender, e);
{
return FailedStartMatch(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeStartGame; public event IEventHandler.BeforeEventHandler? BeforeStartGame;
@ -382,40 +237,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedStartGame; public event IEventHandler.SucceedEventHandler? SucceedStartGame;
public event IEventHandler.FailedEventHandler? FailedStartGame; public event IEventHandler.FailedEventHandler? FailedStartGame;
public EventResult OnBeforeStartGameEvent(GeneralEventArgs e) public void OnBeforeStartGameEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeStartGame != null) BeforeStartGame?.Invoke(sender, e);
{
return BeforeStartGame(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterStartGameEvent(GeneralEventArgs e) public void OnAfterStartGameEvent(object sender, GeneralEventArgs e)
{ {
if (AfterStartGame != null) AfterStartGame?.Invoke(sender, e);
{
return AfterStartGame(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedStartGameEvent(GeneralEventArgs e) public void OnSucceedStartGameEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedStartGame != null) SucceedStartGame?.Invoke(sender, e);
{
return SucceedStartGame(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedStartGameEvent(GeneralEventArgs e) public void OnFailedStartGameEvent(object sender, GeneralEventArgs e)
{ {
if (FailedStartGame != null) FailedStartGame?.Invoke(sender, e);
{
return FailedStartGame(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeOpenInventory; public event IEventHandler.BeforeEventHandler? BeforeOpenInventory;
@ -423,40 +262,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedOpenInventory; public event IEventHandler.SucceedEventHandler? SucceedOpenInventory;
public event IEventHandler.FailedEventHandler? FailedOpenInventory; public event IEventHandler.FailedEventHandler? FailedOpenInventory;
public EventResult OnBeforeOpenInventoryEvent(GeneralEventArgs e) public void OnBeforeOpenInventoryEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeOpenInventory != null) BeforeOpenInventory?.Invoke(sender, e);
{
return BeforeOpenInventory(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterOpenInventoryEvent(GeneralEventArgs e) public void OnAfterOpenInventoryEvent(object sender, GeneralEventArgs e)
{ {
if (AfterOpenInventory != null) AfterOpenInventory?.Invoke(sender, e);
{
return AfterOpenInventory(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedOpenInventoryEvent(GeneralEventArgs e) public void OnSucceedOpenInventoryEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedOpenInventory != null) SucceedOpenInventory?.Invoke(sender, e);
{
return SucceedOpenInventory(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedOpenInventoryEvent(GeneralEventArgs e) public void OnFailedOpenInventoryEvent(object sender, GeneralEventArgs e)
{ {
if (FailedOpenInventory != null) FailedOpenInventory?.Invoke(sender, e);
{
return FailedOpenInventory(this, e);
}
else return EventResult.NoEventImplement;
} }
public event IEventHandler.BeforeEventHandler? BeforeOpenStore; public event IEventHandler.BeforeEventHandler? BeforeOpenStore;
@ -464,40 +287,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IEventHandler.SucceedEventHandler? SucceedOpenStore; public event IEventHandler.SucceedEventHandler? SucceedOpenStore;
public event IEventHandler.FailedEventHandler? FailedOpenStore; public event IEventHandler.FailedEventHandler? FailedOpenStore;
public EventResult OnBeforeOpenStoreEvent(GeneralEventArgs e) public void OnBeforeOpenStoreEvent(object sender, GeneralEventArgs e)
{ {
if (BeforeOpenStore != null) BeforeOpenStore?.Invoke(sender, e);
{
return BeforeOpenStore(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnAfterOpenStoreEvent(GeneralEventArgs e) public void OnAfterOpenStoreEvent(object sender, GeneralEventArgs e)
{ {
if (AfterOpenStore != null) AfterOpenStore?.Invoke(sender, e);
{
return AfterOpenStore(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedOpenStoreEvent(GeneralEventArgs e) public void OnSucceedOpenStoreEvent(object sender, GeneralEventArgs e)
{ {
if (SucceedOpenStore != null) SucceedOpenStore?.Invoke(sender, e);
{
return SucceedOpenStore(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedOpenStoreEvent(GeneralEventArgs e) public void OnFailedOpenStoreEvent(object sender, GeneralEventArgs e)
{ {
if (FailedOpenStore != null) FailedOpenStore?.Invoke(sender, e);
{
return FailedOpenStore(this, e);
}
else return EventResult.NoEventImplement;
} }
} }
} }

View File

@ -1,6 +1,5 @@
using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Interface;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Desktop.Library.Component; using Milimoe.FunGame.Desktop.Library.Component;
namespace Milimoe.FunGame.Desktop.Library.Base namespace Milimoe.FunGame.Desktop.Library.Base
@ -12,40 +11,24 @@ namespace Milimoe.FunGame.Desktop.Library.Base
public event IRegEventHandler.SucceedEventHandler? SucceedReg; public event IRegEventHandler.SucceedEventHandler? SucceedReg;
public event IRegEventHandler.FailedEventHandler? FailedReg; public event IRegEventHandler.FailedEventHandler? FailedReg;
public EventResult OnAfterRegEvent(RegisterEventArgs e) public void OnAfterRegEvent(object sender, RegisterEventArgs e)
{ {
if (AfterReg != null) AfterReg?.Invoke(sender, e);
{
return AfterReg(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnBeforeRegEvent(RegisterEventArgs e) public void OnBeforeRegEvent(object sender, RegisterEventArgs e)
{ {
if (BeforeReg != null) BeforeReg?.Invoke(sender, e);
{
return BeforeReg(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnFailedRegEvent(RegisterEventArgs e) public void OnFailedRegEvent(object sender, RegisterEventArgs e)
{ {
if (FailedReg != null) FailedReg?.Invoke(sender, e);
{
return FailedReg(this, e);
}
else return EventResult.NoEventImplement;
} }
public EventResult OnSucceedRegEvent(RegisterEventArgs e) public void OnSucceedRegEvent(object sender, RegisterEventArgs e)
{ {
if (SucceedReg != null) SucceedReg?.Invoke(sender, e);
{
return SucceedReg(this, e);
}
else return EventResult.NoEventImplement;
} }
} }
} }

View File

@ -79,7 +79,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component
return input; return input;
} }
/// <summary> /// <summary>
/// 提供公共方法给Controller发送消息弹窗这样可以防止跨线程时弹窗不在最上层<para/> /// 提供公共方法给Controller发送消息弹窗这样可以防止跨线程时弹窗不在最上层<para/>
/// 支持返回点击的按钮,用于判断是否取消输入 /// 支持返回点击的按钮,用于判断是否取消输入

View File

@ -159,7 +159,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component
public static MessageResult Message(string msg, string title, int autoclose = 0) 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; MessageResult result = new ShowMessage(objs).MessageResult;
return result; return result;
} }
@ -212,7 +212,7 @@ namespace Milimoe.FunGame.Desktop.Library.Component
string result = new ShowMessage(objs).InputResult; string result = new ShowMessage(objs).InputResult;
return result; return result;
} }
public static string InputMessageCancel(string msg, string title, out MessageResult cancel) public static string InputMessageCancel(string msg, string title, out MessageResult cancel)
{ {
object[] objs = { title, msg, 0, MessageButtonType.Input }; object[] objs = { title, msg, 0, MessageButtonType.Input };

View File

@ -1,5 +1,4 @@
using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Transmittal;
using Milimoe.FunGame.Core.Library.Common.Plugin;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Desktop.Model 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.RoomList RoomList { get; } = new();
public static Core.Model.Session Session { get; } = new(); public static Core.Model.Session Session { get; } = new();
public static Core.Model.FunGameConfig Config { 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 Core.Library.Common.Network.Socket? Socket { get; set; } = null;
public static Controller.RunTimeController? Controller { get; set; } = null; public static Controller.RunTimeController? Controller { get; set; } = null;
public static UI.Main? Main { get; set; } = null; public static UI.Main? Main { get; set; } = null;

View File

@ -85,29 +85,30 @@ namespace Milimoe.FunGame.Desktop.UI
UsernameText.Focus(); UsernameText.Focus();
} }
public EventResult FailedLoginEvent(object sender, LoginEventArgs e) public void FailedLoginEvent(object sender, LoginEventArgs e)
{ {
GoToLogin.Enabled = true; GoToLogin.Enabled = true;
RunTime.Main?.OnFailedLoginEvent(e); RunTime.Main?.OnFailedLoginEvent(sender, e);
return EventResult.Success; RunTime.PluginLoader?.OnFailedLoginEvent(sender, e);
} }
private EventResult SucceedLoginEvent(object sender, LoginEventArgs e) private void SucceedLoginEvent(object sender, LoginEventArgs e)
{ {
RunTime.Main?.OnSucceedLoginEvent(e); RunTime.Main?.OnSucceedLoginEvent(sender, e);
return EventResult.Success; 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; RunTime.Main?.OnBeforeLoginEvent(sender, e);
return EventResult.Success; 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); RunTime.Main?.OnAfterLoginEvent(sender, e);
return EventResult.Success; 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(); if (Config.FunGame_isAutoConnect) InvokeController_Connect();
}); });
@ -82,6 +82,10 @@ namespace Milimoe.FunGame.Desktop.UI
FailedConnect += FailedConnectEvent; FailedConnect += FailedConnectEvent;
SucceedConnect += SucceedConnectEvent; SucceedConnect += SucceedConnectEvent;
SucceedLogin += SucceedLoginEvent; SucceedLogin += SucceedLoginEvent;
SucceedIntoRoom += SucceedIntoRoomEvent;
FailedIntoRoom += FailedIntoRoomEvent;
SucceedCreateRoom += SucceedCreateRoomEvent;
FailedCreateRoom += FailedCreateRoomEvent;
} }
#endregion #endregion
@ -492,7 +496,7 @@ namespace Milimoe.FunGame.Desktop.UI
} }
/// <summary> /// <summary>
/// 重复处理加入房间的方法 /// 加入房间的具体处理方法
/// </summary> /// </summary>
/// <param name="roomid"></param> /// <param name="roomid"></param>
/// <returns></returns> /// <returns></returns>
@ -505,17 +509,20 @@ namespace Milimoe.FunGame.Desktop.UI
{ {
if (Usercfg.InRoom.Roomid == "-1") if (Usercfg.InRoom.Roomid == "-1")
{ {
if (ShowMessage(ShowMessageType.YesNo, "已找到房间 -> [ " + roomid + " ]\n是否加入", "已找到房间") == MessageResult.Yes) if (await MainController.GetRoomPlayerCountAsync(roomid) < 8)
{ {
Room r = GetRoom(roomid); if (ShowMessage(ShowMessageType.YesNo, "已找到房间 -> [ " + roomid + " ]\n是否加入", "已找到房间") == MessageResult.Yes)
if (MainController != null && await MainController.IntoRoomAsync(r))
{ {
SetRoomid(r); Room r = GetRoom(roomid);
InRoom(); return await InvokeController_IntoRoom(r);
return true;
} }
return false;
}
else
{
ShowMessage(ShowMessageType.Warning, "房间已满,拒绝加入!");
return false;
} }
return false;
} }
else else
{ {
@ -719,7 +726,7 @@ namespace Milimoe.FunGame.Desktop.UI
{ {
TaskUtility.StartAndAwaitTask(async () => TaskUtility.StartAndAwaitTask(async () =>
{ {
if (!await MainController.ChatAsync(" [ " + Usercfg.LoginUserName + " ] 说: " + text)) if (!await InvokeController_SendTalk(" [ " + Usercfg.LoginUserName + " ] 说: " + text))
{ {
WritelnGameInfo("联网消息发送失败。"); WritelnGameInfo("联网消息发送失败。");
} }
@ -748,20 +755,13 @@ namespace Milimoe.FunGame.Desktop.UI
ShowMessage(ShowMessageType.Warning, "已在房间中,无法创建房间。"); ShowMessage(ShowMessageType.Warning, "已在房间中,无法创建房间。");
return; return;
} }
string roomid = await InvokeController_CreateRoom(RoomType, Password); Room room = await InvokeController_CreateRoom(RoomType, Password);
if (MainController is not null && roomid != "-1") if (MainController is not null && room.Roomid != "-1")
{ {
await MainController.UpdateRoomAsync(); await MainController.UpdateRoomAsync();
Room r = GetRoom(roomid); await InvokeController_IntoRoom(room);
await InvokeController_IntoRoom(r);
SetRoomid(r);
InRoom();
WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 创建" + RoomType + "房间");
WritelnGameInfo(">> 创建" + RoomType + "房间成功!房间号: " + roomid);
ShowMessage(ShowMessageType.General, "创建" + RoomType + "房间成功!\n房间号是 -> [ " + roomid + " ]", "创建成功");
return; return;
} }
ShowMessage(ShowMessageType.General, "创建" + RoomType + "房间失败!", "创建失败");
} }
/// <summary> /// <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> /// <summary>
/// 显示FunGame信息 /// 显示FunGame信息
/// </summary> /// </summary>
@ -1112,13 +1093,13 @@ namespace Milimoe.FunGame.Desktop.UI
bool IsMix = CheckMix.Checked; bool IsMix = CheckMix.Checked;
bool IsTeam = CheckTeam.Checked; bool IsTeam = CheckTeam.Checked;
bool IsHasPass = CheckHasPass.Checked; bool IsHasPass = CheckHasPass.Checked;
if (IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_All; if (IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.All;
else if (IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_AllHasPass; else if (IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.AllHasPass;
else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_Mix; else if (IsMix && !IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Mix;
else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_MixHasPass; else if (IsMix && !IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.MixHasPass;
else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_Team; else if (!IsMix && IsTeam && !IsHasPass) Config.FunGame_GameMode = GameMode.Team;
else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.GameMode_TeamHasPass; else if (!IsMix && IsTeam && IsHasPass) Config.FunGame_GameMode = GameMode.TeamHasPass;
else Config.FunGame_GameMode = GameMode.GameMode_All; else Config.FunGame_GameMode = GameMode.All;
} }
/// <summary> /// <summary>
@ -1263,7 +1244,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
/// <returns></returns> /// <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) if (Config.FunGame_isConnected && Config.FunGame_isAutoRetry && CurrentRetryTimes <= MaxRetryTimes)
@ -1276,7 +1257,6 @@ namespace Milimoe.FunGame.Desktop.UI
GetMessage("连接服务器失败5秒后自动尝试重连。"); GetMessage("连接服务器失败5秒后自动尝试重连。");
} }
else GetMessage("无法连接至服务器,请检查你的网络连接。"); else GetMessage("无法连接至服务器,请检查你的网络连接。");
return EventResult.Success;
} }
/// <summary> /// <summary>
@ -1285,7 +1265,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
/// <returns></returns> /// <returns></returns>
public EventResult SucceedConnectEvent(object sender, GeneralEventArgs e) public void SucceedConnectEvent(object sender, GeneralEventArgs e)
{ {
// 创建MainController // 创建MainController
MainController = new MainController(this); 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); RunTime.Controller?.AutoLogin(Config.FunGame_AutoLoginUser, Config.FunGame_AutoLoginPassword, Config.FunGame_AutoLoginKey);
} }
return EventResult.Success;
} }
/// <summary> /// <summary>
@ -1303,10 +1282,54 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
/// <returns></returns> /// <returns></returns>
private EventResult SucceedLoginEvent(object sender, GeneralEventArgs e) private void SucceedLoginEvent(object sender, GeneralEventArgs e)
{ {
TaskUtility.StartAndAwaitTask(SucceedLoginEvent_Handler); 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 #endregion
@ -1351,10 +1374,10 @@ namespace Milimoe.FunGame.Desktop.UI
GameInfo.Clear(); GameInfo.Clear();
break; break;
case Constant.FunGame_CreateMix: case Constant.FunGame_CreateMix:
TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.GameMode_Mix)); TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.Mix));
break; break;
case Constant.FunGame_CreateTeam: case Constant.FunGame_CreateTeam:
TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.GameMode_Team)); TaskUtility.StartAndAwaitTask(() => CreateRoom_Handler(GameMode.Team));
break; break;
case Constant.FunGame_StartGame: case Constant.FunGame_StartGame:
break; break;
@ -1454,32 +1477,42 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns> /// <returns></returns>
private void InvokeController_Connect() private void InvokeController_Connect()
{ {
try ConnectEventArgs EventArgs = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port);
{
ConnectEventArgs EventArgs = new(RunTime.Session.Server_IP, RunTime.Session.Server_Port);
ConnectResult result = ConnectResult.CanNotConnect;
TaskUtility.StartAndAwaitTask(() => ConnectResult result = ConnectResult.CanNotConnect;
{
if (OnBeforeConnectEvent(EventArgs) == EventResult.Fail) return; TaskUtility.StartAndAwaitTask(() =>
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)
{ {
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);
});
} }
/// <summary> /// <summary>
@ -1488,13 +1521,18 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns> /// <returns></returns>
public void InvokeController_Disconnect() public void InvokeController_Disconnect()
{ {
GeneralEventArgs EventArgs = new();
try try
{ {
bool result = false; bool result = false;
TaskUtility.StartAndAwaitTask(async () => 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) if (Usercfg.LoginUser.Id != 0)
{ {
@ -1504,17 +1542,73 @@ namespace Milimoe.FunGame.Desktop.UI
result = RunTime.Controller?.Disconnect() ?? false; result = RunTime.Controller?.Disconnect() ?? false;
}).OnCompleted(() => }).OnCompleted(() =>
{ {
if (result) OnSucceedDisconnectEvent(new GeneralEventArgs()); if (result)
else OnFailedDisconnectEvent(new GeneralEventArgs()); {
OnAfterDisconnectEvent(new GeneralEventArgs()); 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) catch (Exception e)
{ {
GetMessage(e.GetErrorInfo(), TimeType.None); 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>
/// 进入房间 /// 进入房间
/// </summary> /// </summary>
@ -1522,53 +1616,88 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns> /// <returns></returns>
public async Task<bool> InvokeController_IntoRoom(Room room) public async Task<bool> InvokeController_IntoRoom(Room room)
{ {
RoomEventArgs EventArgs = new(room);
bool result = false; bool result = false;
try try
{ {
RoomEventArgs EventArgs = new(room); OnBeforeIntoRoomEvent(this, EventArgs);
if (OnBeforeIntoRoomEvent(EventArgs) == EventResult.Fail) return result; RunTime.PluginLoader?.OnBeforeIntoRoomEvent(this, EventArgs);
if (EventArgs.Cancel) return result;
result = MainController is not null && await MainController.IntoRoomAsync(room); result = MainController is not null && await MainController.IntoRoomAsync(room);
if (result) OnSucceedIntoRoomEvent(EventArgs); if (room.Roomid != "-1")
else OnFailedIntoRoomEvent(EventArgs); {
OnAfterIntoRoomEvent(EventArgs); 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) catch (Exception e)
{ {
GetMessage(e.GetErrorInfo(), TimeType.None); GetMessage(e.GetErrorInfo(), TimeType.None);
OnFailedIntoRoomEvent(this, EventArgs);
RunTime.PluginLoader?.OnFailedIntoRoomEvent(this, EventArgs);
OnAfterIntoRoomEvent(this, EventArgs);
RunTime.PluginLoader?.OnAfterIntoRoomEvent(this, EventArgs);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// 创建房间 /// 创建房间
/// </summary> /// </summary>
/// <param name="room"></param> /// <param name="room"></param>
/// <returns></returns> /// <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 try
{ {
RoomEventArgs EventArgs = new(RoomType, Password); OnBeforeCreateRoomEvent(this, EventArgs);
if (OnBeforeCreateRoomEvent(EventArgs) == EventResult.Fail) return roomid; 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); if (room.Roomid != "-1")
else OnFailedCreateRoomEvent(EventArgs); {
OnAfterCreateRoomEvent(EventArgs); 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) catch (Exception e)
{ {
GetMessage(e.GetErrorInfo(), TimeType.None); 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> /// <summary>
@ -1578,22 +1707,37 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns> /// <returns></returns>
public async Task<bool> InvokeController_QuitRoom(Room room, bool isMaster) public async Task<bool> InvokeController_QuitRoom(Room room, bool isMaster)
{ {
RoomEventArgs EventArgs = new(room);
bool result = false; bool result = false;
try try
{ {
RoomEventArgs EventArgs = new(room); OnBeforeIntoRoomEvent(this, EventArgs);
if (OnBeforeIntoRoomEvent(EventArgs) == EventResult.Fail) return result; RunTime.PluginLoader?.OnBeforeIntoRoomEvent(this, EventArgs);
if (EventArgs.Cancel) return result;
result = MainController is not null && await MainController.QuitRoomAsync(room.Roomid, isMaster); result = MainController is not null && await MainController.QuitRoomAsync(room.Roomid, isMaster);
if (result) OnSucceedIntoRoomEvent(EventArgs); if (result)
else OnFailedIntoRoomEvent(EventArgs); {
OnAfterIntoRoomEvent(EventArgs); 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) catch (Exception e)
{ {
GetMessage(e.GetErrorInfo(), TimeType.None); GetMessage(e.GetErrorInfo(), TimeType.None);
OnFailedQuitRoomEvent(this, EventArgs);
RunTime.PluginLoader?.OnFailedQuitRoomEvent(this, EventArgs);
OnAfterQuitRoomEvent(this, EventArgs);
RunTime.PluginLoader?.OnAfterQuitRoomEvent(this, EventArgs);
} }
return result; return result;
@ -1605,31 +1749,45 @@ namespace Milimoe.FunGame.Desktop.UI
/// <returns></returns> /// <returns></returns>
public async Task<bool> LogOut() public async Task<bool> LogOut()
{ {
GeneralEventArgs EventArgs = new();
bool result = false; bool result = false;
try try
{ {
GeneralEventArgs EventArgs = new(); OnBeforeLogoutEvent(this, EventArgs);
if (OnBeforeLogoutEvent(EventArgs) == EventResult.Fail) return result; RunTime.PluginLoader?.OnBeforeLogoutEvent(this, EventArgs);
if (EventArgs.Cancel) return result;
if (Usercfg.LoginUser.Id == 0) return result; if (Usercfg.LoginUser.Id == 0) return result;
if (Usercfg.InRoom.Roomid != "-1") if (Usercfg.InRoom.Roomid != "-1")
{ {
string roomid = Usercfg.InRoom.Roomid;
bool isMaster = Usercfg.InRoom.RoomMaster?.Id == Usercfg.LoginUser?.Id; 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(); result = MainController is not null && await MainController.LogOutAsync();
if (result) OnSucceedLogoutEvent(EventArgs); if (result)
else OnFailedLogoutEvent(EventArgs); {
OnAfterLogoutEvent(EventArgs); 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) catch (Exception e)
{ {
GetMessage(e.GetErrorInfo(), TimeType.None); GetMessage(e.GetErrorInfo(), TimeType.None);
OnFailedLogoutEvent(this, EventArgs);
RunTime.PluginLoader?.OnFailedLogoutEvent(this, EventArgs);
OnAfterLogoutEvent(this, EventArgs);
RunTime.PluginLoader?.OnAfterLogoutEvent(this, EventArgs);
} }
return result; return result;

View File

@ -1,6 +1,5 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller; using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Library;
@ -112,19 +111,18 @@ namespace Milimoe.FunGame.Desktop.UI
Dispose(); Dispose();
} }
private EventResult SucceedRegEvent(object sender, GeneralEventArgs e) private void SucceedRegEvent(object sender, GeneralEventArgs e)
{ {
string username = ((RegisterEventArgs)e).Username; string username = ((RegisterEventArgs)e).Username;
string password = ((RegisterEventArgs)e).Password; string password = ((RegisterEventArgs)e).Password;
TaskUtility.StartAndAwaitTask(async () => await LoginController.LoginAccountAsync(username, password, encrypt: false)); TaskUtility.StartAndAwaitTask(async () => await LoginController.LoginAccountAsync(username, password, encrypt: false));
RunTime.Login?.Close(); RunTime.Login?.Close();
return EventResult.Success;
} }
private void RegButton_Click(object sender, EventArgs e) private void RegButton_Click(object sender, EventArgs e)
{ {
RegButton.Enabled = false; RegButton.Enabled = false;
TaskUtility.StartAndAwaitTask(async() => TaskUtility.StartAndAwaitTask(async () =>
{ {
if (!await Reg_Handler()) RegButton.Enabled = true; if (!await Reg_Handler()) RegButton.Enabled = true;
else Close(); else Close();