From ce0c933b35ffad3a9c633b772f0ddfa3f46927a9 Mon Sep 17 00:00:00 2001 From: yeziuku <53083103+yeziuku@users.noreply.github.com> Date: Sun, 12 Jan 2025 16:03:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=89=E5=85=A8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E8=BD=AC=E6=8D=A2=EF=BC=8C=E9=80=82=E9=85=8D=20SQLite?= =?UTF-8?q?=EF=BC=9B=E6=9B=B4=E6=96=B0=E7=89=88=E6=9D=83=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=EF=BC=9B=E4=B8=8A=E4=B8=80=E5=B1=82=E5=B7=B2=E7=BB=8F=E6=9C=89?= =?UTF-8?q?=20try-catch=20=E6=97=B6=EF=BC=8C=E5=BA=95=E5=B1=82=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8=20(#105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加安全类型转换,适配 SQLite * 更新版权声明 * 上一层已经有 try-catch 时,底层需要抛出异常 不应该再在底层添加 try-catch,或者添加了一定要抛出新的异常。 --- Api/Utility/Factory.cs | 24 +++-- Library/Constant/FunGameInfo.cs | 4 +- Service/SocketManager.cs | 170 +++++++++++++++----------------- 3 files changed, 97 insertions(+), 101 deletions(-) diff --git a/Api/Utility/Factory.cs b/Api/Utility/Factory.cs index af62498..84ab01e 100644 --- a/Api/Utility/Factory.cs +++ b/Api/Utility/Factory.cs @@ -1,4 +1,4 @@ -using System.Data; +using System.Data; using Milimoe.FunGame.Core.Api.EntityFactory; using Milimoe.FunGame.Core.Api.OpenEntityAdapter; using Milimoe.FunGame.Core.Api.Transmittal; @@ -416,7 +416,10 @@ namespace Milimoe.FunGame.Core.Api.Utility { long id = (long)drRoom[RoomQuery.Column_ID]; string roomid = (string)drRoom[RoomQuery.Column_RoomID]; - DateTime createTime = (DateTime)drRoom[RoomQuery.Column_CreateTime]; + if (!DateTime.TryParse(drRoom[RoomQuery.Column_CreateTime].ToString(), out DateTime createTime)) + { + createTime = General.DefaultTime; + } User roomMaster = user; RoomType roomType = (RoomType)Convert.ToInt32(drRoom[RoomQuery.Column_RoomType]); string gameModule = (string)drRoom[RoomQuery.Column_GameModule]; @@ -424,7 +427,7 @@ namespace Milimoe.FunGame.Core.Api.Utility RoomState roomState = (RoomState)Convert.ToInt32(drRoom[RoomQuery.Column_RoomState]); bool isRank = Convert.ToInt32(drRoom[RoomQuery.Column_IsRank]) == 1; string password = (string)drRoom[RoomQuery.Column_Password]; - int maxUsers = (int)drRoom[RoomQuery.Column_MaxUsers]; + int maxUsers = Convert.ToInt32(drRoom[RoomQuery.Column_MaxUsers]); room = GetRoom(id, roomid, createTime, roomMaster, roomType, gameModule, gameMap, roomState, isRank, password, maxUsers); } return room; @@ -448,7 +451,10 @@ namespace Milimoe.FunGame.Core.Api.Utility { long Id = (long)drRoom[RoomQuery.Column_ID]; string Roomid = (string)drRoom[RoomQuery.Column_RoomID]; - DateTime createTime = (DateTime)drRoom[RoomQuery.Column_CreateTime]; + if (!DateTime.TryParse(drRoom[RoomQuery.Column_CreateTime].ToString(), out DateTime createTime)) + { + createTime = General.DefaultTime; + } User roomMaster = General.UnknownUserInstance; if (dsUser != null && dsUser.Tables.Count > 0) { @@ -533,8 +539,14 @@ namespace Milimoe.FunGame.Core.Api.Utility { long Id = (long)dr[UserQuery.Column_UID]; string Username = (string)dr[UserQuery.Column_Username]; - DateTime RegTime = (DateTime)dr[UserQuery.Column_RegTime]; - DateTime LastTime = (DateTime)dr[UserQuery.Column_LastTime]; + if (!DateTime.TryParse(dr[UserQuery.Column_RegTime].ToString(), out DateTime RegTime)) + { + RegTime = General.DefaultTime; + } + if (!DateTime.TryParse(dr[UserQuery.Column_LastTime].ToString(), out DateTime LastTime)) + { + LastTime = General.DefaultTime; + } string Email = (string)dr[UserQuery.Column_Email]; string NickName = (string)dr[UserQuery.Column_Nickname]; bool IsAdmin = Convert.ToInt32(dr[UserQuery.Column_IsAdmin]) == 1; diff --git a/Library/Constant/FunGameInfo.cs b/Library/Constant/FunGameInfo.cs index bfab102..79c5f97 100644 --- a/Library/Constant/FunGameInfo.cs +++ b/Library/Constant/FunGameInfo.cs @@ -11,7 +11,7 @@ FunGame_Server } - public const string FunGame_CopyRight = @"©2024 Milimoe. 米粒的糖果屋"; + public const string FunGame_CopyRight = @"©2025 Milimoe. 米粒的糖果屋"; /// /// 添加-debug启动项将开启DebugMode(仅适用于Desktop或Console) @@ -52,7 +52,7 @@ FunGame.FunGame_Server => FunGame_Server, _ => "" }; - return type + " [版本: " + FunGame_Version + FunGame_VersionPatch + "]\n" + (type.Equals(FunGame_Desktop) ? @"©" : "(C)") + "2024 Milimoe. 保留所有权利\n"; + return type + " [版本: " + FunGame_Version + FunGame_VersionPatch + "]\n" + (type.Equals(FunGame_Desktop) ? @"©" : "(C)") + "2022-Present Milimoe. 保留所有权利\n"; } } } diff --git a/Service/SocketManager.cs b/Service/SocketManager.cs index 9382cd0..99b3a43 100644 --- a/Service/SocketManager.cs +++ b/Service/SocketManager.cs @@ -1,4 +1,4 @@ -using System.Net; +using System.Net; using System.Net.Sockets; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Library.Constant; @@ -209,62 +209,54 @@ namespace Milimoe.FunGame.Core.Service /// SocketObjects internal static Library.Common.Network.SocketObject[] Receive(Socket? clientSocket = null) { - try + List result = []; + Socket? tempSocket = clientSocket is null ? Socket : clientSocket; + if (tempSocket != null) { - List result = []; - Socket? tempSocket = clientSocket is null ? Socket : clientSocket; - if (tempSocket != null) + // 从服务器接收消息 + byte[] buffer = new byte[General.SocketByteSize]; + int length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); + string msg = ""; + if (length > 0) { - // 从服务器接收消息 - byte[] buffer = new byte[General.SocketByteSize]; - int length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); - string msg = ""; - if (length > 0) + msg = General.DefaultEncoding.GetString(buffer, 0, length); + if (JsonManager.IsCompleteJson(msg)) { - msg = General.DefaultEncoding.GetString(buffer, 0, length); - if (JsonManager.IsCompleteJson(msg)) + foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) { - foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) - { - result.Add(obj); - // 客户端接收消息,广播ScoketObject到每个UIModel - if (clientSocket is null) OnSocketReceive(obj); - } - return [.. result]; - } - else - { - Thread.Sleep(20); - while (true) - { - if (tempSocket.Available > 0) - { - length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); - msg += General.DefaultEncoding.GetString(buffer, 0, length); - if (JsonManager.IsCompleteJson(msg)) - { - break; - } - Thread.Sleep(20); - } - else break; - } + result.Add(obj); + // 客户端接收消息,广播ScoketObject到每个UIModel + if (clientSocket is null) OnSocketReceive(obj); } + return [.. result]; } - foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) + else { - result.Add(obj); - // 客户端接收消息,广播ScoketObject到每个UIModel - if (clientSocket is null) OnSocketReceive(obj); + Thread.Sleep(20); + while (true) + { + if (tempSocket.Available > 0) + { + length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); + msg += General.DefaultEncoding.GetString(buffer, 0, length); + if (JsonManager.IsCompleteJson(msg)) + { + break; + } + Thread.Sleep(20); + } + else break; + } } } - return [.. result]; - } - catch (Exception e) - { - TXTHelper.AppendErrorLog(e.GetErrorInfo()); - return []; + foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) + { + result.Add(obj); + // 客户端接收消息,广播ScoketObject到每个UIModel + if (clientSocket is null) OnSocketReceive(obj); + } } + return [.. result]; } /// @@ -275,62 +267,54 @@ namespace Milimoe.FunGame.Core.Service /// SocketObjects internal static async Task ReceiveAsync(Socket? clientSocket = null) { - try + List result = []; + Socket? tempSocket = clientSocket is null ? Socket : clientSocket; + if (tempSocket != null) { - List result = []; - Socket? tempSocket = clientSocket is null ? Socket : clientSocket; - if (tempSocket != null) + // 从服务器接收消息 + byte[] buffer = new byte[General.SocketByteSize]; + int length = await tempSocket.ReceiveAsync(new ArraySegment(buffer), SocketFlags.None); + string msg = ""; + if (length > 0) { - // 从服务器接收消息 - byte[] buffer = new byte[General.SocketByteSize]; - int length = await tempSocket.ReceiveAsync(new ArraySegment(buffer), SocketFlags.None); - string msg = ""; - if (length > 0) + msg = General.DefaultEncoding.GetString(buffer, 0, length); + if (JsonManager.IsCompleteJson(msg)) { - msg = General.DefaultEncoding.GetString(buffer, 0, length); - if (JsonManager.IsCompleteJson(msg)) + foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) { - foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) - { - result.Add(obj); - // 客户端接收消息,广播ScoketObject到每个UIModel - if (clientSocket is null) OnSocketReceive(obj); - } - return [.. result]; - } - else - { - Thread.Sleep(20); - while (true) - { - if (tempSocket.Available > 0) - { - length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); - msg += General.DefaultEncoding.GetString(buffer, 0, length); - if (JsonManager.IsCompleteJson(msg)) - { - break; - } - Thread.Sleep(20); - } - else break; - } + result.Add(obj); + // 客户端接收消息,广播ScoketObject到每个UIModel + if (clientSocket is null) OnSocketReceive(obj); } + return [.. result]; } - foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) + else { - result.Add(obj); - // 客户端接收消息,广播ScoketObject到每个UIModel - if (clientSocket is null) OnSocketReceive(obj); + Thread.Sleep(20); + while (true) + { + if (tempSocket.Available > 0) + { + length = tempSocket.Receive(buffer, buffer.Length, SocketFlags.None); + msg += General.DefaultEncoding.GetString(buffer, 0, length); + if (JsonManager.IsCompleteJson(msg)) + { + break; + } + Thread.Sleep(20); + } + else break; + } } } - return [.. result]; - } - catch (Exception e) - { - TXTHelper.AppendErrorLog(e.GetErrorInfo()); - return []; + foreach (Library.Common.Network.SocketObject obj in JsonManager.GetObjects(msg)) + { + result.Add(obj); + // 客户端接收消息,广播ScoketObject到每个UIModel + if (clientSocket is null) OnSocketReceive(obj); + } } + return [.. result]; } #endregion