diff --git a/FunGame.Core/Service/SocketManager.cs b/FunGame.Core/Service/SocketManager.cs index bfc8944..39d5e84 100644 --- a/FunGame.Core/Service/SocketManager.cs +++ b/FunGame.Core/Service/SocketManager.cs @@ -1,6 +1,6 @@ -using Milimoe.FunGame.Core.Library.Constant; -using System.Net; +using System.Net; using System.Net.Sockets; +using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Service { @@ -19,6 +19,53 @@ namespace Milimoe.FunGame.Core.Service private static Socket? _Socket = null; private static Socket? _ServerSocket = null; + /// + /// 异步监听事件 + /// + /// 结果类 + /// 通信类型 + /// 参数 + /// 结果 + internal delegate Task SocketHandler(SocketMessageType type, params object[] objs); + + /// + /// 异步监听事件 + /// + /// 通信类型 + /// 参数 + /// 线程 + internal delegate Task SocketHandler(SocketMessageType type, params object[] objs); + + /// + /// 监听返回值为bool的事件 + /// + internal event SocketHandler? SocketReceiveBoolAsync; + + /// + /// 监听返回值为String的事件 + /// + internal event SocketHandler? SocketReceiveStringAsync; + + /// + /// 监听返回值为object的事件 + /// + internal event SocketHandler? SocketReceiveObjectAsync; + + /// + /// 监听返回值为int的事件 + /// + internal event SocketHandler? SocketReceiveIntAsync; + + /// + /// 监听返回值为decimal的事件 + /// + internal event SocketHandler? SocketReceiveDecimalAsync; + + /// + /// 监听没有返回值的事件 + /// + internal event SocketHandler? SocketReceiveAsync; + /// /// 创建服务器监听Socket /// @@ -110,7 +157,7 @@ namespace Milimoe.FunGame.Core.Service /// 通信类型 /// 参数 /// 通信结果 - internal static SocketResult Send(Socket ClientSocket, SocketMessageType type, Guid token, object[] objs) + internal static SocketResult Send(Socket ClientSocket, SocketMessageType type, Guid token, params object[] objs) { if (ClientSocket != null && objs != null && objs.Length > 0) { @@ -129,7 +176,7 @@ namespace Milimoe.FunGame.Core.Service /// 通信类型 /// 参数 /// 通信结果 - internal static SocketResult Send(SocketMessageType type, Guid token, object[] objs) + internal static SocketResult Send(SocketMessageType type, Guid token, params object[] objs) { if (objs is null || objs.Length <= 0) { @@ -223,5 +270,93 @@ namespace Milimoe.FunGame.Core.Service _ => SocketSet.Unknown, }; } + + /// + /// 触发异步返回bool事件 + /// + /// 通信类型 + /// 参数 + /// bool结果 + internal async Task OnSocketReceiveBoolAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveBoolAsync != null) + { + return await SocketReceiveBoolAsync.Invoke(type, objs); + } + return false; + } + + /// + /// 触发异步返回string事件 + /// + /// 通信类型 + /// 参数 + /// string结果 + internal async Task OnSocketReceiveStringAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveStringAsync != null) + { + return await SocketReceiveStringAsync.Invoke(type, objs); + } + return ""; + } + + /// + /// 触发异步返回object事件 + /// + /// 通信类型 + /// 参数 + /// object结果 + internal async Task OnSocketReceiveObjectAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveObjectAsync != null) + { + return await SocketReceiveObjectAsync.Invoke(type, objs); + } + return General.EntityInstance; + } + + /// + /// 触发异步返回int事件 + /// + /// 通信类型 + /// 参数 + /// int结果 + internal async Task OnSocketReceiveIntAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveIntAsync != null) + { + return await SocketReceiveIntAsync.Invoke(type, objs); + } + return -1; + } + + /// + /// 触发异步返回decimal事件 + /// + /// 通信类型 + /// 参数 + /// decimal结果 + internal async Task OnSocketReceiveDecimalAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveDecimalAsync != null) + { + return await SocketReceiveDecimalAsync.Invoke(type, objs); + } + return -1; + } + + /// + /// 触发异步无返回值事件 + /// + /// 通信类型 + /// 参数 + internal async Task OnSocketReceiveAsync(SocketMessageType type, params object[] objs) + { + if (SocketReceiveAsync != null) + { + await SocketReceiveAsync.Invoke(type, objs); + } + } } } diff --git a/FunGame.Desktop/UI/Register/Register.cs b/FunGame.Desktop/UI/Register/Register.cs index 440c17b..5de9ba5 100644 --- a/FunGame.Desktop/UI/Register/Register.cs +++ b/FunGame.Desktop/UI/Register/Register.cs @@ -130,8 +130,11 @@ namespace Milimoe.FunGame.Desktop.UI break; } }; - if (InvokeRequired) Invoke(Action); - else Action(); + if (!IsDisposed) + { + if (InvokeRequired) Invoke(Action); + else Action(); + } } catch (Exception e) {