From 33dea82b4377ba69f79369d203bfc5209e37e55d Mon Sep 17 00:00:00 2001 From: Mili Date: Tue, 7 Mar 2023 23:12:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Socketmanager=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FunGame.Core/Service/SocketManager.cs | 143 +++++++++++++++++++++++- FunGame.Desktop/UI/Register/Register.cs | 7 +- 2 files changed, 144 insertions(+), 6 deletions(-) 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) {