From f0b3d0a549863a8110cc3fe40572bd49a1c060d1 Mon Sep 17 00:00:00 2001 From: yeziuku <53083103+yeziuku@users.noreply.github.com> Date: Mon, 20 Jan 2025 19:21:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E9=A1=B9=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=E4=BF=AE=E6=94=B9=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 明确 JsonTool 类的意义 * 添加了一个 JsonTool 对象 * 明确 SQLHelper 的使用规则;添加取消令牌在 Delay 方法上 --- Api/Utility/JsonTool.cs | 50 +++++++++++++++++++++-------- Controller/BaseAddonController.cs | 8 ++++- Controller/ServerAddonController.cs | 17 +++++++--- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/Api/Utility/JsonTool.cs b/Api/Utility/JsonTool.cs index 399b7e3..13fffdc 100644 --- a/Api/Utility/JsonTool.cs +++ b/Api/Utility/JsonTool.cs @@ -1,32 +1,54 @@ -using System.Collections; +using System.Collections; +using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; +using System.Text.Unicode; using Milimoe.FunGame.Core.Library.Common.Architecture; -using Milimoe.FunGame.Core.Library.Common.JsonConverter; using Milimoe.FunGame.Core.Service; namespace Milimoe.FunGame.Core.Api.Utility { /// - /// 创建一个Json工具类 + /// Json工具类 /// 此工具类拥有单独的序列化选项,支持添加自定义转换器 /// 继承自 /// public class JsonTool { /// - /// 序列化选项 + /// 默认的序列化选项 /// public static JsonSerializerOptions JsonSerializerOptions => JsonManager.GeneralOptions; + + /// + /// 序列化选项 + /// + public JsonSerializerOptions Options { get; set; } = new(); + + /// + /// 创建一个Json工具类 + /// 此工具类拥有单独的序列化选项,支持添加自定义转换器 + /// 继承自 + /// + public JsonTool() + { + Options.WriteIndented = JsonSerializerOptions.WriteIndented; + Options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); + Options.ReferenceHandler = ReferenceHandler.IgnoreCycles; + foreach (JsonConverter converter in JsonSerializerOptions.Converters) + { + Options.Converters.Add(converter); + } + } /// /// 注册一个自定义转换器,支持 /// /// - public static void AddConverter(JsonConverter converter) + public void AddConverter(JsonConverter converter) { - if (!JsonSerializerOptions.Converters.Contains(converter)) - JsonSerializerOptions.Converters.Add(converter); + if (!Options.Converters.Contains(converter)) + Options.Converters.Add(converter); } /// @@ -47,7 +69,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public string GetString(T obj) => JsonManager.GetString(obj, JsonSerializerOptions); + public string GetString(T obj) => JsonManager.GetString(obj, Options); /// /// 反序列化Json对象 @@ -55,14 +77,14 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(string json) => JsonManager.GetObject(json, JsonSerializerOptions); + public T? GetObject(string json) => JsonManager.GetObject(json, Options); /// /// 反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别 /// /// /// - public object? GetObject(string json) => JsonManager.GetObject(json, JsonSerializerOptions); + public object? GetObject(string json) => JsonManager.GetObject(json, Options); /// /// 反序列化Hashtable中Key对应的Json对象 @@ -71,7 +93,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(Hashtable table, string key) => JsonManager.GetObject(table, key, JsonSerializerOptions); + public T? GetObject(Hashtable table, string key) => JsonManager.GetObject(table, key, Options); /// /// 反序列化Dictionary中Key对应的Json对象 @@ -80,7 +102,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? GetObject(Dictionary dict, string key) => JsonManager.GetObject(dict, key, JsonSerializerOptions); + public T? GetObject(Dictionary dict, string key) => JsonManager.GetObject(dict, key, Options); /// /// 反序列化IEnumerable中的Json对象 可指定反序列化选项 @@ -89,7 +111,7 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public T? JsonDeserializeFromIEnumerable(IEnumerable e, int index) => JsonManager.GetObject(e, index, JsonSerializerOptions); + public T? JsonDeserializeFromIEnumerable(IEnumerable e, int index) => JsonManager.GetObject(e, index, Options); /// /// 反序列化多个Json对象 @@ -98,6 +120,6 @@ namespace Milimoe.FunGame.Core.Api.Utility /// /// /// - public List GetObjects(string json) => JsonManager.GetObjects(json, JsonSerializerOptions); + public List GetObjects(string json) => JsonManager.GetObjects(json, Options); } } diff --git a/Controller/BaseAddonController.cs b/Controller/BaseAddonController.cs index 88497da..4533da3 100644 --- a/Controller/BaseAddonController.cs +++ b/Controller/BaseAddonController.cs @@ -1,4 +1,5 @@ -using Milimoe.FunGame.Core.Interface.Addons; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Constant; @@ -41,6 +42,11 @@ namespace Milimoe.FunGame.Core.Controller /// public void Error(Exception e) => MaskMethod_Error(e); + /// + /// JSON 工具类对象 + /// + public JsonTool JSON { get; } = new(); + /// /// 新建一个BaseAddonController /// diff --git a/Controller/ServerAddonController.cs b/Controller/ServerAddonController.cs index e384673..0cb3cb4 100644 --- a/Controller/ServerAddonController.cs +++ b/Controller/ServerAddonController.cs @@ -1,4 +1,4 @@ -using Milimoe.FunGame.Core.Api.Transmittal; +using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.SQLScript.Common; @@ -17,7 +17,7 @@ namespace Milimoe.FunGame.Core.Controller public class ServerAddonController(IAddon addon, Dictionary delegates) : BaseAddonController(addon, delegates), IServerAddon where T : IAddon { /// - /// 数据库连接器 + /// 数据库连接器 [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用: ] /// public SQLHelper? SQLHelper => _sqlHelper; @@ -32,7 +32,16 @@ namespace Milimoe.FunGame.Core.Controller private CancellationTokenSource? _cts = null; /// - /// 新建 SQLHelper + /// 获取一个可以用来进行事务操作、更新/新增数据的数据库连接器 [ 请使用 using Controller.GetSQLHelper() 来让它能够自动释放 ] + /// + /// + public SQLHelper? GetSQLHelper() + { + return Factory.OpenFactory.GetSQLHelper(); + } + + /// + /// 新建 SQLHelper [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用: ] /// public void NewSQLHelper() { @@ -55,7 +64,7 @@ namespace Milimoe.FunGame.Core.Controller // 每两小时触发一次SQL服务器的心跳查询,防止SQL服务器掉线 try { - await Task.Delay(2 * 1000 * 3600); + await Task.Delay(2 * 1000 * 3600, _cts.Token); _sqlHelper?.ExecuteDataSet(ServerLoginLogs.Select_GetLastLoginTime()); } catch (OperationCanceledException)