From f0362e72578a2fdcefffb48ff69abbe86057624a Mon Sep 17 00:00:00 2001 From: Mili Date: Thu, 9 Mar 2023 23:44:40 +0800 Subject: [PATCH] Add SocketObject --- FunGame.Core/Interface/Base/ISocket.cs | 5 +- .../Library/Common/Network/ClientSocket.cs | 13 +- .../Library/Common/Network/JsonObject.cs | 4 +- .../Library/Common/Network/ServerSocket.cs | 2 +- FunGame.Core/Library/Common/Network/Socket.cs | 20 ++- .../Library/Common/Network/SocketObject.cs | 18 +++ FunGame.Core/Library/Constant/ConstantSet.cs | 3 + FunGame.Core/Library/Constant/TypeEnum.cs | 5 +- FunGame.Core/Service/SocketManager.cs | 123 ++---------------- .../Controller/RegisterController.cs | 4 +- .../Library/Interface/ICallBack.cs | 9 -- .../Library/Interface/ISocketHandler.cs | 9 ++ FunGame.Desktop/Model/MainModel.cs | 11 +- FunGame.Desktop/Model/RegisterModel.cs | 2 +- FunGame.Desktop/UI/Register/Register.cs | 2 +- 15 files changed, 84 insertions(+), 146 deletions(-) create mode 100644 FunGame.Core/Library/Common/Network/SocketObject.cs delete mode 100644 FunGame.Desktop/Library/Interface/ICallBack.cs create mode 100644 FunGame.Desktop/Library/Interface/ISocketHandler.cs diff --git a/FunGame.Core/Interface/Base/ISocket.cs b/FunGame.Core/Interface/Base/ISocket.cs index c6ee270..40cee43 100644 --- a/FunGame.Core/Interface/Base/ISocket.cs +++ b/FunGame.Core/Interface/Base/ISocket.cs @@ -1,5 +1,4 @@ -using System.Collections; -using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Interface.Base { @@ -15,7 +14,7 @@ namespace Milimoe.FunGame.Core.Interface.Base public bool Connected => Instance != null && Instance.Connected; public bool Receiving { get; } public SocketResult Send(SocketMessageType type, params object[] objs); - public object[] Receive(); + public Library.Common.Network.SocketObject Receive(); public void Close(); public void StartReceiving(Task t); } diff --git a/FunGame.Core/Library/Common/Network/ClientSocket.cs b/FunGame.Core/Library/Common/Network/ClientSocket.cs index c5b704d..bce83d7 100644 --- a/FunGame.Core/Library/Common/Network/ClientSocket.cs +++ b/FunGame.Core/Library/Common/Network/ClientSocket.cs @@ -37,11 +37,16 @@ namespace Milimoe.FunGame.Core.Library.Common.Network Instance?.Close(); } - public object[] Receive() + public SocketObject Receive() { - object[] result = SocketManager.Receive(Instance); - if (result.Length != 3) throw new SocketWrongInfoException(); - return result; + try + { + return SocketManager.Receive(Instance); + } + catch + { + throw new SocketWrongInfoException(); + } } public SocketResult Send(SocketMessageType type, params object[] objs) diff --git a/FunGame.Core/Library/Common/Network/JsonObject.cs b/FunGame.Core/Library/Common/Network/JsonObject.cs index d94587c..a42992e 100644 --- a/FunGame.Core/Library/Common/Network/JsonObject.cs +++ b/FunGame.Core/Library/Common/Network/JsonObject.cs @@ -13,7 +13,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network public string JsonString { get; } [JsonConstructor] - public JsonObject(SocketMessageType MessageType, Guid Token, object[] Parameters) + public JsonObject(SocketMessageType MessageType, Guid Token, params object[] Parameters) { this.MessageType = MessageType; this.Token = Token; @@ -21,7 +21,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network this.JsonString = JsonSerializer.Serialize(this); } - public static string GetString(SocketMessageType MessageType, Guid Token, object[] Parameters) + public static string GetString(SocketMessageType MessageType, Guid Token, params object[] Parameters) { return new JsonObject(MessageType, Token, Parameters).JsonString; } diff --git a/FunGame.Core/Library/Common/Network/ServerSocket.cs b/FunGame.Core/Library/Common/Network/ServerSocket.cs index 8835a47..653a73e 100644 --- a/FunGame.Core/Library/Common/Network/ServerSocket.cs +++ b/FunGame.Core/Library/Common/Network/ServerSocket.cs @@ -77,7 +77,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network throw new ListeningSocketCanNotSendException(); } - public object[] Receive() + public SocketObject Receive() { throw new ListeningSocketCanNotSendException(); } diff --git a/FunGame.Core/Library/Common/Network/Socket.cs b/FunGame.Core/Library/Common/Network/Socket.cs index c5acd6c..a8de6d5 100644 --- a/FunGame.Core/Library/Common/Network/Socket.cs +++ b/FunGame.Core/Library/Common/Network/Socket.cs @@ -54,16 +54,22 @@ namespace Milimoe.FunGame.Core.Library.Common.Network return SocketResult.NotSent; } - public object[] Receive() + public SocketObject Receive() { - object[] result = SocketManager.Receive(); - if (result.Length != 2) throw new SocketWrongInfoException(); - if ((SocketMessageType)result[0] == SocketMessageType.HeartBeat) + try { - if (WaitHeartBeatReply != null && !WaitHeartBeatReply.IsCompleted) WaitHeartBeatReply.Wait(1); - _HeartBeatFaileds = 0; + SocketObject result = SocketManager.Receive(); + if (result.SocketType == SocketMessageType.HeartBeat) + { + if (WaitHeartBeatReply != null && !WaitHeartBeatReply.IsCompleted) WaitHeartBeatReply.Wait(1); + _HeartBeatFaileds = 0; + } + return result; + } + catch + { + throw new SocketWrongInfoException(); } - return result; } public void CheckHeartBeatFaileds() diff --git a/FunGame.Core/Library/Common/Network/SocketObject.cs b/FunGame.Core/Library/Common/Network/SocketObject.cs new file mode 100644 index 0000000..257fb14 --- /dev/null +++ b/FunGame.Core/Library/Common/Network/SocketObject.cs @@ -0,0 +1,18 @@ +using Milimoe.FunGame.Core.Library.Constant; + +namespace Milimoe.FunGame.Core.Library.Common.Network +{ + public readonly struct SocketObject + { + public SocketMessageType SocketType { get; } = SocketMessageType.Unknown; + public Guid Token { get; } = Guid.Empty; + public object[] Parameters { get; } = Array.Empty(); + + public SocketObject(SocketMessageType type, Guid token, params object[] parameters) + { + SocketType = type; + Token = token; + Parameters = parameters; + } + } +} diff --git a/FunGame.Core/Library/Constant/ConstantSet.cs b/FunGame.Core/Library/Constant/ConstantSet.cs index eef19aa..8842658 100644 --- a/FunGame.Core/Library/Constant/ConstantSet.cs +++ b/FunGame.Core/Library/Constant/ConstantSet.cs @@ -37,6 +37,9 @@ public const string Chat = "Chat"; public const string Reg = "Reg"; public const string CheckReg = "CheckReg"; + public const string CreateRoom = "CreateRoom"; + public const string UpdateRoom = "UpdateRoom"; + public const string ChangeRoomSetting = "ChangeRoomSetting"; } public class ReflectionSet diff --git a/FunGame.Core/Library/Constant/TypeEnum.cs b/FunGame.Core/Library/Constant/TypeEnum.cs index 8409cb9..333da41 100644 --- a/FunGame.Core/Library/Constant/TypeEnum.cs +++ b/FunGame.Core/Library/Constant/TypeEnum.cs @@ -61,7 +61,10 @@ QuitRoom, Chat, Reg, - CheckReg + CheckReg, + CreateRoom, + UpdateRoom, + ChangeRoomSetting } public enum SocketRuntimeType diff --git a/FunGame.Core/Service/SocketManager.cs b/FunGame.Core/Service/SocketManager.cs index 1f01b6d..1058e54 100644 --- a/FunGame.Core/Service/SocketManager.cs +++ b/FunGame.Core/Service/SocketManager.cs @@ -156,9 +156,9 @@ namespace Milimoe.FunGame.Core.Service /// 用于客户端接收服务器信息 /// /// 通信类型[0]和参数[1] - internal static object[] Receive() + internal static Library.Common.Network.SocketObject Receive() { - object[] result = Array.Empty(); + Library.Common.Network.SocketObject result = default; if (Socket != null) { // 从服务器接收消息 @@ -170,7 +170,7 @@ namespace Milimoe.FunGame.Core.Service Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg); if (json != null) { - result = new object[] { json.MessageType, json.Parameters }; + result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters); } return result; } @@ -183,9 +183,9 @@ namespace Milimoe.FunGame.Core.Service /// /// 客户端Socket /// 通信类型[0]、Token[1]和参数[2] - internal static object[] Receive(Socket ClientSocket) + internal static Library.Common.Network.SocketObject Receive(Socket ClientSocket) { - object[] result = Array.Empty(); + Library.Common.Network.SocketObject result = default; if (ClientSocket != null) { // 从客户端接收消息 @@ -197,7 +197,7 @@ namespace Milimoe.FunGame.Core.Service Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg); if (json != null) { - result = new object[] { json.MessageType, json.Token, json.Parameters }; + result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters); } return result; } @@ -226,6 +226,9 @@ namespace Milimoe.FunGame.Core.Service SocketMessageType.Chat => SocketSet.Chat, SocketMessageType.Reg => SocketSet.Reg, SocketMessageType.CheckReg => SocketSet.CheckReg, + SocketMessageType.CreateRoom => SocketSet.CreateRoom, + SocketMessageType.UpdateRoom => SocketSet.UpdateRoom, + SocketMessageType.ChangeRoomSetting => SocketSet.ChangeRoomSetting, _ => SocketSet.Unknown, }; } @@ -241,7 +244,7 @@ namespace Milimoe.FunGame.Core.Service /// 通信类型 /// 参数 /// 结果 - internal delegate Task SocketHandler(SocketMessageType type, params object[] objs); + internal delegate Task SocketHandler(Library.Common.Network.SocketObject SocketObject); /// /// 异步监听事件 @@ -249,123 +252,23 @@ namespace Milimoe.FunGame.Core.Service /// 通信类型 /// 参数 /// 线程 - internal delegate Task SocketHandler(SocketMessageType type, params object[] objs); - - /// - /// 监听返回值为bool的事件 - /// - internal static event SocketHandler? SocketReceiveBoolAsync; - - /// - /// 监听返回值为String的事件 - /// - internal static event SocketHandler? SocketReceiveStringAsync; - - /// - /// 监听返回值为object的事件 - /// - internal static event SocketHandler? SocketReceiveObjectAsync; - - /// - /// 监听返回值为int的事件 - /// - internal static event SocketHandler? SocketReceiveIntAsync; - - /// - /// 监听返回值为decimal的事件 - /// - internal static event SocketHandler? SocketReceiveDecimalAsync; + internal delegate Task SocketHandler(Library.Common.Network.SocketObject SocketObject); /// /// 监听没有返回值的事件 /// internal static event SocketHandler? SocketReceiveAsync; - /// - /// 触发异步返回bool事件 - /// - /// 通信类型 - /// 参数 - /// bool结果 - internal static async Task OnSocketReceiveBoolAsync(SocketMessageType type, params object[] objs) - { - if (SocketReceiveBoolAsync != null) - { - return await SocketReceiveBoolAsync.Invoke(type, objs); - } - return false; - } - - /// - /// 触发异步返回string事件 - /// - /// 通信类型 - /// 参数 - /// string结果 - internal static async Task OnSocketReceiveStringAsync(SocketMessageType type, params object[] objs) - { - if (SocketReceiveStringAsync != null) - { - return await SocketReceiveStringAsync.Invoke(type, objs); - } - return ""; - } - - /// - /// 触发异步返回object事件 - /// - /// 通信类型 - /// 参数 - /// object结果 - internal static async Task OnSocketReceiveObjectAsync(SocketMessageType type, params object[] objs) - { - if (SocketReceiveObjectAsync != null) - { - return await SocketReceiveObjectAsync.Invoke(type, objs); - } - return General.EntityInstance; - } - - /// - /// 触发异步返回int事件 - /// - /// 通信类型 - /// 参数 - /// int结果 - internal static async Task OnSocketReceiveIntAsync(SocketMessageType type, params object[] objs) - { - if (SocketReceiveIntAsync != null) - { - return await SocketReceiveIntAsync.Invoke(type, objs); - } - return -1; - } - - /// - /// 触发异步返回decimal事件 - /// - /// 通信类型 - /// 参数 - /// decimal结果 - internal static async Task OnSocketReceiveDecimalAsync(SocketMessageType type, params object[] objs) - { - if (SocketReceiveDecimalAsync != null) - { - return await SocketReceiveDecimalAsync.Invoke(type, objs); - } - return -1; - } - /// /// 触发异步无返回值事件 /// /// 通信类型 /// 参数 - internal static async Task OnSocketReceiveAsync(SocketMessageType type, params object[] objs) + internal static void OnSocketReceiveAsync(Library.Common.Network.SocketObject SocketObject) { if (SocketReceiveAsync != null) { - await SocketReceiveAsync.Invoke(type, objs); + SocketReceiveAsync.Invoke(SocketObject); } } diff --git a/FunGame.Desktop/Controller/RegisterController.cs b/FunGame.Desktop/Controller/RegisterController.cs index 1f1846e..48b6d20 100644 --- a/FunGame.Desktop/Controller/RegisterController.cs +++ b/FunGame.Desktop/Controller/RegisterController.cs @@ -3,11 +3,11 @@ using Milimoe.FunGame.Desktop.Library; using Milimoe.FunGame.Desktop.Model; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Desktop.UI; -using Milimoe.FunGame.Desktop.Library.Interface; +using Milimoe.FunGame.Core.Library.Common.Network; namespace Milimoe.FunGame.Desktop.Controller { - public class RegisterController : ISocketCallBack + public class RegisterController { private readonly Register Register; private readonly RegisterModel RegModel; diff --git a/FunGame.Desktop/Library/Interface/ICallBack.cs b/FunGame.Desktop/Library/Interface/ICallBack.cs deleted file mode 100644 index b6cfbb5..0000000 --- a/FunGame.Desktop/Library/Interface/ICallBack.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Milimoe.FunGame.Core.Library.Constant; - -namespace Milimoe.FunGame.Desktop.Library.Interface -{ - public interface ISocketCallBack - { - public void SocketHandler(SocketMessageType type, params object[]? objs); - } -} diff --git a/FunGame.Desktop/Library/Interface/ISocketHandler.cs b/FunGame.Desktop/Library/Interface/ISocketHandler.cs new file mode 100644 index 0000000..9fbca94 --- /dev/null +++ b/FunGame.Desktop/Library/Interface/ISocketHandler.cs @@ -0,0 +1,9 @@ +using Milimoe.FunGame.Core.Library.Common.Network; + +namespace Milimoe.FunGame.Desktop.Library.Interface +{ + public interface ISocketHandler + { + public void SocketHandler(SocketObject SocketObject); + } +} diff --git a/FunGame.Desktop/Model/MainModel.cs b/FunGame.Desktop/Model/MainModel.cs index 061f37a..36c2397 100644 --- a/FunGame.Desktop/Model/MainModel.cs +++ b/FunGame.Desktop/Model/MainModel.cs @@ -1,6 +1,7 @@ using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Event; +using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Desktop.Controller; @@ -296,13 +297,13 @@ namespace Milimoe.FunGame.Desktop.Model Socket?.StartReceiving(ReceivingTask); } - private object[] GetServerMessage() + private SocketObject GetServerMessage() { if (Socket != null && Socket.Connected) { return Socket.Receive(); } - return new object[2] { SocketMessageType.Unknown, Array.Empty() }; + return new SocketObject(SocketMessageType.Unknown, Guid.Empty, Array.Empty()); } private SocketMessageType Receiving() @@ -311,9 +312,9 @@ namespace Milimoe.FunGame.Desktop.Model SocketMessageType result = SocketMessageType.Unknown; try { - object[] ServerMessage = GetServerMessage(); - SocketMessageType type = (SocketMessageType)ServerMessage[0]; - object[] objs = (object[])ServerMessage[1]; + SocketObject ServerMessage = GetServerMessage(); + SocketMessageType type = ServerMessage.SocketType; + object[] objs = ServerMessage.Parameters; result = type; switch (type) { diff --git a/FunGame.Desktop/Model/RegisterModel.cs b/FunGame.Desktop/Model/RegisterModel.cs index 8df22d4..1f1bd46 100644 --- a/FunGame.Desktop/Model/RegisterModel.cs +++ b/FunGame.Desktop/Model/RegisterModel.cs @@ -8,7 +8,7 @@ using Milimoe.FunGame.Desktop.UI; namespace Milimoe.FunGame.Desktop.Model { - public class RegisterModel : ISocketCallBack + public class RegisterModel { private readonly Register Register; diff --git a/FunGame.Desktop/UI/Register/Register.cs b/FunGame.Desktop/UI/Register/Register.cs index 5de9ba5..00d780e 100644 --- a/FunGame.Desktop/UI/Register/Register.cs +++ b/FunGame.Desktop/UI/Register/Register.cs @@ -10,7 +10,7 @@ using Milimoe.FunGame.Desktop.Library.Interface; namespace Milimoe.FunGame.Desktop.UI { - public partial class Register : BaseReg, ISocketCallBack + public partial class Register : BaseReg { public bool CheckReg { get; set; } = false; public RegisterEventArgs EventArgs { get; set; } = new RegisterEventArgs();