测试事件系统

This commit is contained in:
Mili 2023-02-19 02:16:03 +08:00
parent d830709706
commit 6fd29f5d47
13 changed files with 341 additions and 170 deletions

View File

@ -18,10 +18,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IConnectEvent : IEvent public interface IConnectEvent : IEvent
{ {
public event BeforeEvent BeforeConnectEvent; public event BeforeEvent? BeforeConnectEvent;
public event AfterEvent AfterConnectEvent; public event AfterEvent? AfterConnectEvent;
public event SucceedEvent SucceedConnectEvent; public event SucceedEvent? SucceedConnectEvent;
public event FailedEvent FailedConnectEvent; public event FailedEvent? FailedConnectEvent;
public EventResult OnBeforeConnectEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeConnectEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterConnectEvent(object sender, GeneralEventArgs e); public EventResult OnAfterConnectEvent(object sender, GeneralEventArgs e);
@ -31,10 +31,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IDisconnectEvent : IEvent public interface IDisconnectEvent : IEvent
{ {
public event BeforeEvent BeforeDisconnectEvent; public event BeforeEvent? BeforeDisconnectEvent;
public event AfterEvent AfterDisconnectEvent; public event AfterEvent? AfterDisconnectEvent;
public event SucceedEvent SucceedDisconnectEvent; public event SucceedEvent? SucceedDisconnectEvent;
public event FailedEvent FailedDisconnectEvent; public event FailedEvent? FailedDisconnectEvent;
public EventResult OnBeforeDisconnectEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeDisconnectEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterDisconnectEvent(object sender, GeneralEventArgs e); public EventResult OnAfterDisconnectEvent(object sender, GeneralEventArgs e);
@ -44,10 +44,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface ILoginEvent : IEvent public interface ILoginEvent : IEvent
{ {
public event BeforeEvent BeforeLoginEvent; public event BeforeEvent? BeforeLoginEvent;
public event AfterEvent AfterLoginEvent; public event AfterEvent? AfterLoginEvent;
public event SucceedEvent SucceedLoginEvent; public event SucceedEvent? SucceedLoginEvent;
public event FailedEvent FailedLoginEvent; public event FailedEvent? FailedLoginEvent;
public EventResult OnBeforeLoginEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeLoginEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterLoginEvent(object sender, GeneralEventArgs e); public EventResult OnAfterLoginEvent(object sender, GeneralEventArgs e);
@ -57,10 +57,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface ILogoutEvent : IEvent public interface ILogoutEvent : IEvent
{ {
public event BeforeEvent BeforeLogoutEvent; public event BeforeEvent? BeforeLogoutEvent;
public event AfterEvent AfterLogoutEvent; public event AfterEvent? AfterLogoutEvent;
public event SucceedEvent SucceedLogoutEvent; public event SucceedEvent? SucceedLogoutEvent;
public event FailedEvent FailedLogoutEvent; public event FailedEvent? FailedLogoutEvent;
public EventResult OnBeforeLogoutEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeLogoutEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterLogoutEvent(object sender, GeneralEventArgs e); public EventResult OnAfterLogoutEvent(object sender, GeneralEventArgs e);
@ -70,10 +70,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IRegEvent : IEvent public interface IRegEvent : IEvent
{ {
public event BeforeEvent BeforeRegEvent; public event BeforeEvent? BeforeRegEvent;
public event AfterEvent AfterRegEvent; public event AfterEvent? AfterRegEvent;
public event SucceedEvent SucceedRegEvent; public event SucceedEvent? SucceedRegEvent;
public event FailedEvent FailedRegEvent; public event FailedEvent? FailedRegEvent;
public EventResult OnBeforeRegEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeRegEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterRegEvent(object sender, GeneralEventArgs e); public EventResult OnAfterRegEvent(object sender, GeneralEventArgs e);
@ -83,10 +83,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IIntoRoomEvent : IEvent public interface IIntoRoomEvent : IEvent
{ {
public event BeforeEvent BeforeIntoRoomEvent; public event BeforeEvent? BeforeIntoRoomEvent;
public event AfterEvent AfterIntoRoomEvent; public event AfterEvent? AfterIntoRoomEvent;
public event SucceedEvent SucceedIntoRoomEvent; public event SucceedEvent? SucceedIntoRoomEvent;
public event FailedEvent FailedIntoRoomEvent; public event FailedEvent? FailedIntoRoomEvent;
public EventResult OnBeforeIntoRoomEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeIntoRoomEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterIntoRoomEvent(object sender, GeneralEventArgs e); public EventResult OnAfterIntoRoomEvent(object sender, GeneralEventArgs e);
@ -96,10 +96,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface ISendTalkEvent : IEvent public interface ISendTalkEvent : IEvent
{ {
public event BeforeEvent BeforeSendTalkEvent; public event BeforeEvent? BeforeSendTalkEvent;
public event AfterEvent AfterSendTalkEvent; public event AfterEvent? AfterSendTalkEvent;
public event SucceedEvent SucceedSendTalkEvent; public event SucceedEvent? SucceedSendTalkEvent;
public event FailedEvent FailedSendTalkEvent; public event FailedEvent? FailedSendTalkEvent;
public EventResult OnBeforeSendTalkEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeSendTalkEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterSendTalkEvent(object sender, GeneralEventArgs e); public EventResult OnAfterSendTalkEvent(object sender, GeneralEventArgs e);
@ -109,10 +109,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface ICreateRoomEvent : IEvent public interface ICreateRoomEvent : IEvent
{ {
public event BeforeEvent BeforeCreateRoomEvent; public event BeforeEvent? BeforeCreateRoomEvent;
public event AfterEvent AfterCreateRoomEvent; public event AfterEvent? AfterCreateRoomEvent;
public event SucceedEvent SucceedCreateRoomEvent; public event SucceedEvent? SucceedCreateRoomEvent;
public event FailedEvent FailedCreateRoomEvent; public event FailedEvent? FailedCreateRoomEvent;
public EventResult OnBeforeCreateRoomEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeCreateRoomEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterCreateRoomEvent(object sender, GeneralEventArgs e); public EventResult OnAfterCreateRoomEvent(object sender, GeneralEventArgs e);
@ -122,10 +122,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IQuitRoomEvent : IEvent public interface IQuitRoomEvent : IEvent
{ {
public event BeforeEvent BeforeQuitRoomEvent; public event BeforeEvent? BeforeQuitRoomEvent;
public event AfterEvent AfterQuitRoomEvent; public event AfterEvent? AfterQuitRoomEvent;
public event SucceedEvent SucceedQuitRoomEvent; public event SucceedEvent? SucceedQuitRoomEvent;
public event FailedEvent FailedQuitRoomEvent; public event FailedEvent? FailedQuitRoomEvent;
public EventResult OnBeforeQuitRoomEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeQuitRoomEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterQuitRoomEvent(object sender, GeneralEventArgs e); public EventResult OnAfterQuitRoomEvent(object sender, GeneralEventArgs e);
@ -135,10 +135,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IChangeRoomSettingEvent : IEvent public interface IChangeRoomSettingEvent : IEvent
{ {
public event BeforeEvent BeforeChangeRoomSettingEvent; public event BeforeEvent? BeforeChangeRoomSettingEvent;
public event AfterEvent AfterChangeRoomSettingEvent; public event AfterEvent? AfterChangeRoomSettingEvent;
public event SucceedEvent SucceedChangeRoomSettingEvent; public event SucceedEvent? SucceedChangeRoomSettingEvent;
public event FailedEvent FailedChangeRoomSettingEvent; public event FailedEvent? FailedChangeRoomSettingEvent;
public EventResult OnBeforeChangeRoomSettingEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeChangeRoomSettingEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterChangeRoomSettingEvent(object sender, GeneralEventArgs e); public EventResult OnAfterChangeRoomSettingEvent(object sender, GeneralEventArgs e);
@ -148,10 +148,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IStartMatchEvent : IEvent public interface IStartMatchEvent : IEvent
{ {
public event BeforeEvent BeforeStartMatchEvent; public event BeforeEvent? BeforeStartMatchEvent;
public event AfterEvent AfterStartMatchEvent; public event AfterEvent? AfterStartMatchEvent;
public event SucceedEvent SucceedStartMatchEvent; public event SucceedEvent? SucceedStartMatchEvent;
public event FailedEvent FailedStartMatchEvent; public event FailedEvent? FailedStartMatchEvent;
public EventResult OnBeforeStartMatchEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeStartMatchEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterStartMatchEvent(object sender, GeneralEventArgs e); public EventResult OnAfterStartMatchEvent(object sender, GeneralEventArgs e);
@ -161,10 +161,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IStartGameEvent : IEvent public interface IStartGameEvent : IEvent
{ {
public event BeforeEvent BeforeStartGameEvent; public event BeforeEvent? BeforeStartGameEvent;
public event AfterEvent AfterStartGameEvent; public event AfterEvent? AfterStartGameEvent;
public event SucceedEvent SucceedStartGameEvent; public event SucceedEvent? SucceedStartGameEvent;
public event FailedEvent FailedStartGameEvent; public event FailedEvent? FailedStartGameEvent;
public EventResult OnBeforeStartGameEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeStartGameEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterStartGameEvent(object sender, GeneralEventArgs e); public EventResult OnAfterStartGameEvent(object sender, GeneralEventArgs e);
@ -174,10 +174,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IChangeProfileEvent : IEvent public interface IChangeProfileEvent : IEvent
{ {
public event BeforeEvent BeforeChangeProfileEvent; public event BeforeEvent? BeforeChangeProfileEvent;
public event AfterEvent AfterChangeProfileEvent; public event AfterEvent? AfterChangeProfileEvent;
public event SucceedEvent SucceedChangeProfileEvent; public event SucceedEvent? SucceedChangeProfileEvent;
public event FailedEvent FailedChangeProfileEvent; public event FailedEvent? FailedChangeProfileEvent;
public EventResult OnBeforeChangeProfileEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeChangeProfileEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterChangeProfileEvent(object sender, GeneralEventArgs e); public EventResult OnAfterChangeProfileEvent(object sender, GeneralEventArgs e);
@ -187,10 +187,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IChangeAccountSettingEvent : IEvent public interface IChangeAccountSettingEvent : IEvent
{ {
public event BeforeEvent BeforeChangeAccountSettingEvent; public event BeforeEvent? BeforeChangeAccountSettingEvent;
public event AfterEvent AfterChangeAccountSettingEvent; public event AfterEvent? AfterChangeAccountSettingEvent;
public event SucceedEvent SucceedChangeAccountSettingEvent; public event SucceedEvent? SucceedChangeAccountSettingEvent;
public event FailedEvent FailedChangeAccountSettingEvent; public event FailedEvent? FailedChangeAccountSettingEvent;
public EventResult OnBeforeChangeAccountSettingEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeChangeAccountSettingEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterChangeAccountSettingEvent(object sender, GeneralEventArgs e); public EventResult OnAfterChangeAccountSettingEvent(object sender, GeneralEventArgs e);
@ -200,10 +200,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IOpenInventoryEvent : IEvent public interface IOpenInventoryEvent : IEvent
{ {
public event BeforeEvent BeforeOpenInventoryEvent; public event BeforeEvent? BeforeOpenInventoryEvent;
public event AfterEvent AfterOpenInventoryEvent; public event AfterEvent? AfterOpenInventoryEvent;
public event SucceedEvent SucceedOpenInventoryEvent; public event SucceedEvent? SucceedOpenInventoryEvent;
public event FailedEvent FailedOpenInventoryEvent; public event FailedEvent? FailedOpenInventoryEvent;
public EventResult OnBeforeOpenInventoryEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeOpenInventoryEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterOpenInventoryEvent(object sender, GeneralEventArgs e); public EventResult OnAfterOpenInventoryEvent(object sender, GeneralEventArgs e);
@ -213,10 +213,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface ISignInEvent : IEvent public interface ISignInEvent : IEvent
{ {
public event BeforeEvent BeforeSignInEvent; public event BeforeEvent? BeforeSignInEvent;
public event AfterEvent AfterSignInEvent; public event AfterEvent? AfterSignInEvent;
public event SucceedEvent SucceedSignInEvent; public event SucceedEvent? SucceedSignInEvent;
public event FailedEvent FailedSignInEvent; public event FailedEvent? FailedSignInEvent;
public EventResult OnBeforeSignInEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeSignInEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterSignInEvent(object sender, GeneralEventArgs e); public EventResult OnAfterSignInEvent(object sender, GeneralEventArgs e);
@ -226,10 +226,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IOpenStoreEvent : IEvent public interface IOpenStoreEvent : IEvent
{ {
public event BeforeEvent BeforeOpenStoreEvent; public event BeforeEvent? BeforeOpenStoreEvent;
public event AfterEvent AfterOpenStoreEvent; public event AfterEvent? AfterOpenStoreEvent;
public event SucceedEvent SucceedOpenStoreEvent; public event SucceedEvent? SucceedOpenStoreEvent;
public event FailedEvent FailedOpenStoreEvent; public event FailedEvent? FailedOpenStoreEvent;
public EventResult OnBeforeOpenStoreEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeOpenStoreEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterOpenStoreEvent(object sender, GeneralEventArgs e); public EventResult OnAfterOpenStoreEvent(object sender, GeneralEventArgs e);
@ -239,10 +239,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IBuyItemEvent : IEvent public interface IBuyItemEvent : IEvent
{ {
public event BeforeEvent BeforeBuyItemEvent; public event BeforeEvent? BeforeBuyItemEvent;
public event AfterEvent AfterBuyItemEvent; public event AfterEvent? AfterBuyItemEvent;
public event SucceedEvent SucceedBuyItemEvent; public event SucceedEvent? SucceedBuyItemEvent;
public event FailedEvent FailedBuyItemEvent; public event FailedEvent? FailedBuyItemEvent;
public EventResult OnBeforeBuyItemEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeBuyItemEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterBuyItemEvent(object sender, GeneralEventArgs e); public EventResult OnAfterBuyItemEvent(object sender, GeneralEventArgs e);
@ -252,10 +252,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IShowRankingEvent : IEvent public interface IShowRankingEvent : IEvent
{ {
public event BeforeEvent BeforeShowRankingEvent; public event BeforeEvent? BeforeShowRankingEvent;
public event AfterEvent AfterShowRankingEvent; public event AfterEvent? AfterShowRankingEvent;
public event SucceedEvent SucceedShowRankingEvent; public event SucceedEvent? SucceedShowRankingEvent;
public event FailedEvent FailedShowRankingEvent; public event FailedEvent? FailedShowRankingEvent;
public EventResult OnBeforeShowRankingEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeShowRankingEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterShowRankingEvent(object sender, GeneralEventArgs e); public EventResult OnAfterShowRankingEvent(object sender, GeneralEventArgs e);
@ -265,10 +265,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IUseItemEvent : IEvent public interface IUseItemEvent : IEvent
{ {
public event BeforeEvent BeforeUseItemEvent; public event BeforeEvent? BeforeUseItemEvent;
public event AfterEvent AfterUseItemEvent; public event AfterEvent? AfterUseItemEvent;
public event SucceedEvent SucceedUseItemEvent; public event SucceedEvent? SucceedUseItemEvent;
public event FailedEvent FailedUseItemEvent; public event FailedEvent? FailedUseItemEvent;
public EventResult OnBeforeUseItemEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeUseItemEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterUseItemEvent(object sender, GeneralEventArgs e); public EventResult OnAfterUseItemEvent(object sender, GeneralEventArgs e);
@ -278,10 +278,10 @@ namespace Milimoe.FunGame.Core.Interface
public interface IEndGameEvent : IEvent public interface IEndGameEvent : IEvent
{ {
public event BeforeEvent BeforeEndGameEvent; public event BeforeEvent? BeforeEndGameEvent;
public event AfterEvent AfterEndGameEvent; public event AfterEvent? AfterEndGameEvent;
public event SucceedEvent SucceedEndGameEvent; public event SucceedEvent? SucceedEndGameEvent;
public event FailedEvent FailedEndGameEvent; public event FailedEvent? FailedEndGameEvent;
public EventResult OnBeforeEndGameEvent(object sender, GeneralEventArgs e); public EventResult OnBeforeEndGameEvent(object sender, GeneralEventArgs e);
public EventResult OnAfterEndGameEvent(object sender, GeneralEventArgs e); public EventResult OnAfterEndGameEvent(object sender, GeneralEventArgs e);

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Event
public string EventMsg { get; set; } = ""; public string EventMsg { get; set; } = "";
public object[]? Parameters { get; set; } = null; public object[]? Parameters { get; set; } = null;
public GeneralEventArgs(string EventMsg, object[]? Parameters = null) public GeneralEventArgs(string EventMsg = "", object[]? Parameters = null)
{ {
this.EventMsg = EventMsg; this.EventMsg = EventMsg;
this.Parameters = Parameters; this.Parameters = Parameters;

View File

@ -1,10 +1,4 @@
using System; namespace Milimoe.FunGame.Core.Library.Constant
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant
{ {
public class InterfaceSet public class InterfaceSet
{ {

View File

@ -1,10 +1,4 @@
using System; namespace Milimoe.FunGame.Core.Library.Constant
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant
{ {
public class FunGameInfo public class FunGameInfo
{ {

View File

@ -1,10 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant namespace Milimoe.FunGame.Core.Library.Constant
{ {
public enum InterfaceMethod public enum InterfaceMethod

View File

@ -1,10 +1,4 @@
using System; namespace Milimoe.FunGame.Core.Library.Constant
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant
{ {
public enum MessageResult public enum MessageResult
{ {
@ -18,7 +12,8 @@ namespace Milimoe.FunGame.Core.Library.Constant
public enum EventResult public enum EventResult
{ {
Success, Success,
Fail Fail,
NoEventImplement
} }
public enum SocketResult public enum SocketResult

View File

@ -1,10 +1,4 @@
using System; namespace Milimoe.FunGame.Core.Library.Constant
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant
{ {
public enum StartMatchState public enum StartMatchState
{ {

View File

@ -1,10 +1,4 @@
using System; namespace Milimoe.FunGame.Core.Library.Constant
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Milimoe.FunGame.Core.Library.Constant
{ {
public enum FormType public enum FormType
{ {

View File

@ -12,6 +12,7 @@ using Milimoe.FunGame.Desktop.Library.Component;
using Milimoe.FunGame.Desktop.Library.Interface; using Milimoe.FunGame.Desktop.Library.Interface;
using Milimoe.FunGame.Desktop.Model; using Milimoe.FunGame.Desktop.Model;
using Milimoe.FunGame.Desktop.UI; using Milimoe.FunGame.Desktop.UI;
using Milimoe.FunGame.Core.Interface;
namespace Milimoe.FunGame.Desktop.Controller namespace Milimoe.FunGame.Desktop.Controller
{ {

View File

@ -0,0 +1,133 @@
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
{
public class BaseMain : GeneralForm, IConnectEvent, IDisconnectEvent, ILogoutEvent
{
public event IEvent.BeforeEvent? BeforeConnectEvent;
public event IEvent.AfterEvent? AfterConnectEvent;
public event IEvent.SucceedEvent? SucceedConnectEvent;
public event IEvent.FailedEvent? FailedConnectEvent;
public EventResult OnAfterConnectEvent(object sender, GeneralEventArgs e)
{
if (AfterConnectEvent != null)
{
return AfterConnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnBeforeConnectEvent(object sender, GeneralEventArgs e)
{
if (BeforeConnectEvent != null)
{
return BeforeConnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnSucceedConnectEvent(object sender, GeneralEventArgs e)
{
if (SucceedConnectEvent != null)
{
return SucceedConnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnFailedConnectEvent(object sender, GeneralEventArgs e)
{
if (FailedConnectEvent != null)
{
return FailedConnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public event IEvent.BeforeEvent? BeforeDisconnectEvent;
public event IEvent.AfterEvent? AfterDisconnectEvent;
public event IEvent.SucceedEvent? SucceedDisconnectEvent;
public event IEvent.FailedEvent? FailedDisconnectEvent;
public EventResult OnAfterDisconnectEvent(object sender, GeneralEventArgs e)
{
if (AfterDisconnectEvent != null)
{
return AfterDisconnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnBeforeDisconnectEvent(object sender, GeneralEventArgs e)
{
if (BeforeDisconnectEvent != null)
{
return BeforeDisconnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnFailedDisconnectEvent(object sender, GeneralEventArgs e)
{
if (FailedDisconnectEvent != null)
{
return FailedDisconnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnSucceedDisconnectEvent(object sender, GeneralEventArgs e)
{
if (SucceedDisconnectEvent != null)
{
return SucceedDisconnectEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public event IEvent.BeforeEvent? BeforeLogoutEvent;
public event IEvent.AfterEvent? AfterLogoutEvent;
public event IEvent.SucceedEvent? SucceedLogoutEvent;
public event IEvent.FailedEvent? FailedLogoutEvent;
public EventResult OnAfterLogoutEvent(object sender, GeneralEventArgs e)
{
if (AfterLogoutEvent != null)
{
return AfterLogoutEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnBeforeLogoutEvent(object sender, GeneralEventArgs e)
{
if (BeforeLogoutEvent != null)
{
return BeforeLogoutEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnFailedLogoutEvent(object sender, GeneralEventArgs e)
{
if (FailedLogoutEvent != null)
{
return FailedLogoutEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
public EventResult OnSucceedLogoutEvent(object sender, GeneralEventArgs e)
{
if (SucceedLogoutEvent != null)
{
return SucceedLogoutEvent(sender, e);
}
else return EventResult.NoEventImplement;
}
}
}

View File

@ -19,6 +19,14 @@ namespace Milimoe.FunGame.Desktop.Library.Component
InitializeComponent(); InitializeComponent();
} }
/// <summary>
/// 绑定事件,子类需要重写
/// </summary>
protected virtual void BindEvent()
{
}
/// <summary> /// <summary>
/// 鼠标按下,开始移动主窗口 /// 鼠标按下,开始移动主窗口
/// </summary> /// </summary>

View File

@ -36,7 +36,7 @@ namespace Milimoe.FunGame.Desktop.Model
} }
catch (Exception e) catch (Exception e)
{ {
Main?.GetMessage(e.GetErrorInfo()); Main.GetMessage(e.GetErrorInfo());
} }
return false; return false;
} }
@ -49,7 +49,7 @@ namespace Milimoe.FunGame.Desktop.Model
} }
catch (Exception e) catch (Exception e)
{ {
Main?.GetMessage(e.GetErrorInfo()); Main.GetMessage(e.GetErrorInfo());
} }
} }
@ -83,7 +83,7 @@ namespace Milimoe.FunGame.Desktop.Model
} }
catch (Exception e) catch (Exception e)
{ {
Main?.GetMessage(e.GetErrorInfo(), false); Main.GetMessage(e.GetErrorInfo(), false);
} }
return false; return false;
@ -91,6 +91,7 @@ namespace Milimoe.FunGame.Desktop.Model
public ConnectResult Connect() public ConnectResult Connect()
{ {
Main.OnBeforeConnectEvent(Main, new GeneralEventArgs());
if (Constant.Server_Address == "" || Constant.Server_Port <= 0) if (Constant.Server_Address == "" || Constant.Server_Port <= 0)
{ {
ShowMessage.ErrorMessage("查找可用的服务器失败!"); ShowMessage.ErrorMessage("查找可用的服务器失败!");
@ -100,17 +101,17 @@ namespace Milimoe.FunGame.Desktop.Model
{ {
if (Config.FunGame_isRetrying) if (Config.FunGame_isRetrying)
{ {
Main?.GetMessage("正在连接服务器,请耐心等待。"); Main.GetMessage("正在连接服务器,请耐心等待。");
Config.FunGame_isRetrying = false; Config.FunGame_isRetrying = false;
return ConnectResult.CanNotConnect; return ConnectResult.CanNotConnect;
} }
if (!Config.FunGame_isConnected) if (!Config.FunGame_isConnected)
{ {
Main!.CurrentRetryTimes++; Main.CurrentRetryTimes++;
if (Main!.CurrentRetryTimes == 0) Main!.GetMessage("开始连接服务器...", true, TimeType.General); if (Main.CurrentRetryTimes == 0) Main.GetMessage("开始连接服务器...", true, TimeType.General);
else Main!.GetMessage("第" + Main!.CurrentRetryTimes + "次重试连接服务器..."); else Main.GetMessage("第" + Main.CurrentRetryTimes + "次重试连接服务器...");
// 超过重连次数上限 // 超过重连次数上限
if (Main!.CurrentRetryTimes + 1 > Main!.MaxRetryTimes) if (Main.CurrentRetryTimes + 1 > Main.MaxRetryTimes)
{ {
throw new Exception("无法连接至服务器,请检查网络并重启游戏再试。"); throw new Exception("无法连接至服务器,请检查网络并重启游戏再试。");
} }
@ -129,9 +130,11 @@ namespace Milimoe.FunGame.Desktop.Model
{ {
if (Receiving() == SocketMessageType.Connect) if (Receiving() == SocketMessageType.Connect)
{ {
Main?.GetMessage("连接服务器成功请登录账号以体验FunGame。"); Main.GetMessage("连接服务器成功请登录账号以体验FunGame。");
Main?.UpdateUI(MainControllerSet.Connected); Main.UpdateUI(MainControllerSet.Connected);
StartReceiving(); StartReceiving();
Main.OnSucceedConnectEvent(Main, new GeneralEventArgs());
Main.OnAfterConnectEvent(Main, new GeneralEventArgs());
} }
}); });
return ConnectResult.Success; return ConnectResult.Success;
@ -143,24 +146,32 @@ namespace Milimoe.FunGame.Desktop.Model
} }
else else
{ {
Main?.GetMessage("已连接至服务器,请勿重复连接。"); Main.GetMessage("已连接至服务器,请勿重复连接。");
return ConnectResult.CanNotConnect; return ConnectResult.CanNotConnect;
} }
} }
catch (Exception e) catch (Exception e)
{ {
Main?.GetMessage(e.GetErrorInfo(), false); Main.GetMessage(e.GetErrorInfo(), false);
Main.UpdateUI(MainControllerSet.SetRed);
Config.FunGame_isRetrying = false; Config.FunGame_isRetrying = false;
if (Config.FunGame_isAutoRetry && Main!.CurrentRetryTimes <= Main!.MaxRetryTimes) if (Config.FunGame_isAutoRetry && Main.CurrentRetryTimes <= Main.MaxRetryTimes)
{ {
Task.Run(() => Task.Run(() =>
{ {
Thread.Sleep(5000); Thread.Sleep(5000);
if (Config.FunGame_isAutoRetry) Connect(); // 再次判断是否开启自动重连 if (Config.FunGame_isAutoRetry) Connect(); // 再次判断是否开启自动重连
}); });
Main?.GetMessage("连接服务器失败5秒后自动尝试重连。"); Main.GetMessage("连接服务器失败5秒后自动尝试重连。");
Main.OnFailedConnectEvent(Main, new GeneralEventArgs());
Main.OnAfterConnectEvent(Main, new GeneralEventArgs());
}
else
{
Main.OnFailedConnectEvent(Main, new GeneralEventArgs());
Main.OnAfterConnectEvent(Main, new GeneralEventArgs());
return ConnectResult.ConnectFailed;
} }
else return ConnectResult.ConnectFailed;
} }
return ConnectResult.CanNotConnect; return ConnectResult.CanNotConnect;
} }
@ -287,7 +298,7 @@ namespace Milimoe.FunGame.Desktop.Model
case SocketMessageType.HeartBeat: case SocketMessageType.HeartBeat:
if (Socket.Connected && Usercfg.LoginUser != null) if (Socket.Connected && Usercfg.LoginUser != null)
Main?.UpdateUI(MainControllerSet.SetGreenAndPing); Main.UpdateUI(MainControllerSet.SetGreenAndPing);
break; break;
case SocketMessageType.Unknown: case SocketMessageType.Unknown:
@ -298,8 +309,8 @@ namespace Milimoe.FunGame.Desktop.Model
catch (Exception e) catch (Exception e)
{ {
// 报错中断服务器连接 // 报错中断服务器连接
Main?.GetMessage(e.GetErrorInfo(), false); Main.GetMessage(e.GetErrorInfo(), false);
Main?.UpdateUI(MainControllerSet.Disconnected); Main.UpdateUI(MainControllerSet.Disconnected);
Close(); Close();
} }
@ -317,9 +328,9 @@ namespace Milimoe.FunGame.Desktop.Model
Config.FunGame_Notice = ServerNotice; Config.FunGame_Notice = ServerNotice;
if (objs.Length > 1) msg = NetworkUtility.ConvertJsonObject<string>(objs[1])!; if (objs.Length > 1) msg = NetworkUtility.ConvertJsonObject<string>(objs[1])!;
Socket!.Token = msg; Socket!.Token = msg;
Main?.GetMessage($"已连接服务器:{ServerName}。\n\n********** 服务器公告 **********\n\n{ServerNotice}\n\n"); Main.GetMessage($"已连接服务器:{ServerName}。\n\n********** 服务器公告 **********\n\n{ServerNotice}\n\n");
// 设置等待登录的黄灯 // 设置等待登录的黄灯
Main?.UpdateUI(MainControllerSet.WaitLoginAndSetYellow); Main.UpdateUI(MainControllerSet.WaitLoginAndSetYellow);
} }
private void SocketHandle_GetNotice(object[] objs) private void SocketHandle_GetNotice(object[] objs)
@ -332,16 +343,16 @@ namespace Milimoe.FunGame.Desktop.Model
string msg = ""; string msg = "";
// 返回的objs是该Login的User对象的各个属性 // 返回的objs是该Login的User对象的各个属性
if (objs.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(objs[0])!; if (objs.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(objs[0])!;
Main?.GetMessage(msg); Main.GetMessage(msg);
Main?.UpdateUI(MainControllerSet.SetUser, new object[] { Factory.New<User>(msg) }); Main.UpdateUI(MainControllerSet.SetUser, new object[] { Factory.New<User>(msg) });
} }
private void SocketHandle_Disconnect(object[] objs) private void SocketHandle_Disconnect(object[] objs)
{ {
string msg = ""; string msg = "";
if (objs.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(objs[0])!; if (objs.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(objs[0])!;
Main?.GetMessage(msg); Main.GetMessage(msg);
Main?.UpdateUI(MainControllerSet.Disconnect); Main.UpdateUI(MainControllerSet.Disconnect);
Close(); Close();
} }
} }

View File

@ -12,10 +12,12 @@ using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Desktop.Controller; using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Desktop.Library.Base;
using Milimoe.FunGame.Core.Library.Common.Event;
namespace Milimoe.FunGame.Desktop.UI namespace Milimoe.FunGame.Desktop.UI
{ {
public partial class Main : GeneralForm public partial class Main : BaseMain
{ {
#region #region
@ -43,6 +45,7 @@ namespace Milimoe.FunGame.Desktop.UI
{ {
InitializeComponent(); InitializeComponent();
Init(); Init();
BindEvent();
} }
/// <summary> /// <summary>
@ -75,6 +78,15 @@ namespace Milimoe.FunGame.Desktop.UI
}); });
} }
protected override void BindEvent()
{
base.BindEvent();
base.AfterConnectEvent += AfterConnectEvent;
base.BeforeConnectEvent += BeforeConnectEvent;
base.FailedConnectEvent += FailedConnectEvent;
base.SucceedConnectEvent += SucceedConnectEvent;
}
#endregion #endregion
#region #region
@ -82,10 +94,8 @@ namespace Milimoe.FunGame.Desktop.UI
/// <summary> /// <summary>
/// 提供公共方法给Controller更新UI /// 提供公共方法给Controller更新UI
/// </summary> /// </summary>
/// <param name="updatetype"></param> /// <param name="updatetype">string?</param>
/// <param name="time"></param> /// <param name="objs">object[]?</param>
/// <param name="timetype"></param>
/// <param name="objs"></param>
public void UpdateUI(string? updatetype, object[]? objs = null) public void UpdateUI(string? updatetype, object[]? objs = null)
{ {
void action() void action()
@ -203,22 +213,13 @@ namespace Milimoe.FunGame.Desktop.UI
break; break;
case MainControllerSet.Connected: case MainControllerSet.Connected:
Action action = () => NoticeText.Text = Config.FunGame_Notice;
{
NoticeText.Text = Config.FunGame_Notice;
if (MainController != null && Config.FunGame_isAutoLogin)
{
// 自动登录 [TODO]
}
};
if (InvokeRequired)
BeginInvoke(action);
else
action();
break; break;
default: default:
// 直接调用UpdateUI(string)为输出该string到控制台。
// 和GetMessage(string)的效果不一样输出格式为HH:mm:ss >> string。
WritelnSystemInfo(updatetype);
break; break;
} }
} }
@ -1132,6 +1133,59 @@ namespace Milimoe.FunGame.Desktop.UI
} }
} }
/// <summary>
/// 连接服务器前触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private new EventResult BeforeConnectEvent(object sender, GeneralEventArgs e)
{
UpdateUI("触发【Before Connect】事件");
return EventResult.Success;
}
/// <summary>
/// 连接服务器后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private new EventResult AfterConnectEvent(object sender, GeneralEventArgs e)
{
UpdateUI("触发【After Connect】事件");
return EventResult.Success;
}
/// <summary>
/// 连接服务器失败后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private new EventResult FailedConnectEvent(object sender, GeneralEventArgs e)
{
UpdateUI("触发【Failed Connect】事件");
return EventResult.Success;
}
/// <summary>
/// 连接服务器成功后触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private new EventResult SucceedConnectEvent(object sender, GeneralEventArgs e)
{
UpdateUI("触发【Succeed Connect】事件");
if (MainController != null && Config.FunGame_isAutoLogin)
{
// 自动登录 [TODO]
}
return EventResult.Success;
}
#endregion #endregion
#region #region