加载项控制器修改 (#107)

* 明确 JsonTool 类的意义

* 添加了一个 JsonTool 对象

* 明确 SQLHelper 的使用规则;添加取消令牌在 Delay 方法上
This commit is contained in:
yeziuku 2025-01-20 19:21:39 +08:00 committed by GitHub
parent 05d1c7204a
commit f0b3d0a549
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 56 additions and 19 deletions

View File

@ -1,32 +1,54 @@
using System.Collections; using System.Collections;
using System.Text.Encodings.Web;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Text.Unicode;
using Milimoe.FunGame.Core.Library.Common.Architecture; using Milimoe.FunGame.Core.Library.Common.Architecture;
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
using Milimoe.FunGame.Core.Service; using Milimoe.FunGame.Core.Service;
namespace Milimoe.FunGame.Core.Api.Utility namespace Milimoe.FunGame.Core.Api.Utility
{ {
/// <summary> /// <summary>
/// 创建一个Json工具类<para/> /// Json工具类<para/>
/// 此工具类拥有单独的序列化选项,支持添加自定义转换器 <see cref="BaseEntityConverter{T}"/><para/> /// 此工具类拥有单独的序列化选项,支持添加自定义转换器 <see cref="BaseEntityConverter{T}"/><para/>
/// <see cref="BaseEntityConverter{T}"/> 继承自 <see cref="JsonConverter"/> /// <see cref="BaseEntityConverter{T}"/> 继承自 <see cref="JsonConverter"/>
/// </summary> /// </summary>
public class JsonTool public class JsonTool
{ {
/// <summary> /// <summary>
/// 序列化选项 /// 默认的序列化选项
/// </summary> /// </summary>
public static JsonSerializerOptions JsonSerializerOptions => JsonManager.GeneralOptions; public static JsonSerializerOptions JsonSerializerOptions => JsonManager.GeneralOptions;
/// <summary>
/// 序列化选项
/// </summary>
public JsonSerializerOptions Options { get; set; } = new();
/// <summary>
/// 创建一个Json工具类<para/>
/// 此工具类拥有单独的序列化选项,支持添加自定义转换器 <see cref="BaseEntityConverter{T}"/><para/>
/// <see cref="BaseEntityConverter{T}"/> 继承自 <see cref="JsonConverter"/>
/// </summary>
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);
}
}
/// <summary> /// <summary>
/// 注册一个自定义转换器,支持 <see cref="BaseEntityConverter{T}"/> /// 注册一个自定义转换器,支持 <see cref="BaseEntityConverter{T}"/>
/// </summary> /// </summary>
/// <param name="converter"></param> /// <param name="converter"></param>
public static void AddConverter(JsonConverter converter) public void AddConverter(JsonConverter converter)
{ {
if (!JsonSerializerOptions.Converters.Contains(converter)) if (!Options.Converters.Contains(converter))
JsonSerializerOptions.Converters.Add(converter); Options.Converters.Add(converter);
} }
/// <summary> /// <summary>
@ -47,7 +69,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="obj"></param> /// <param name="obj"></param>
/// <returns></returns> /// <returns></returns>
public string GetString<T>(T obj) => JsonManager.GetString(obj, JsonSerializerOptions); public string GetString<T>(T obj) => JsonManager.GetString(obj, Options);
/// <summary> /// <summary>
/// 反序列化Json对象 /// 反序列化Json对象
@ -55,14 +77,14 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="json"></param> /// <param name="json"></param>
/// <returns></returns> /// <returns></returns>
public T? GetObject<T>(string json) => JsonManager.GetObject<T>(json, JsonSerializerOptions); public T? GetObject<T>(string json) => JsonManager.GetObject<T>(json, Options);
/// <summary> /// <summary>
/// 反序列化Json对象此方法可能无法返回正确的类型请注意辨别 /// 反序列化Json对象此方法可能无法返回正确的类型请注意辨别
/// </summary> /// </summary>
/// <param name="json"></param> /// <param name="json"></param>
/// <returns></returns> /// <returns></returns>
public object? GetObject(string json) => JsonManager.GetObject(json, JsonSerializerOptions); public object? GetObject(string json) => JsonManager.GetObject(json, Options);
/// <summary> /// <summary>
/// 反序列化Hashtable中Key对应的Json对象 /// 反序列化Hashtable中Key对应的Json对象
@ -71,7 +93,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <param name="table"></param> /// <param name="table"></param>
/// <param name="key"></param> /// <param name="key"></param>
/// <returns></returns> /// <returns></returns>
public T? GetObject<T>(Hashtable table, string key) => JsonManager.GetObject<T>(table, key, JsonSerializerOptions); public T? GetObject<T>(Hashtable table, string key) => JsonManager.GetObject<T>(table, key, Options);
/// <summary> /// <summary>
/// 反序列化Dictionary中Key对应的Json对象 /// 反序列化Dictionary中Key对应的Json对象
@ -80,7 +102,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <param name="dict"></param> /// <param name="dict"></param>
/// <param name="key"></param> /// <param name="key"></param>
/// <returns></returns> /// <returns></returns>
public T? GetObject<T>(Dictionary<string, object> dict, string key) => JsonManager.GetObject<T>(dict, key, JsonSerializerOptions); public T? GetObject<T>(Dictionary<string, object> dict, string key) => JsonManager.GetObject<T>(dict, key, Options);
/// <summary> /// <summary>
/// 反序列化IEnumerable中的Json对象 可指定反序列化选项 /// 反序列化IEnumerable中的Json对象 可指定反序列化选项
@ -89,7 +111,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <param name="e"></param> /// <param name="e"></param>
/// <param name="index"></param> /// <param name="index"></param>
/// <returns></returns> /// <returns></returns>
public T? JsonDeserializeFromIEnumerable<T>(IEnumerable<object> e, int index) => JsonManager.GetObject<T>(e, index, JsonSerializerOptions); public T? JsonDeserializeFromIEnumerable<T>(IEnumerable<object> e, int index) => JsonManager.GetObject<T>(e, index, Options);
/// <summary> /// <summary>
/// 反序列化多个Json对象 /// 反序列化多个Json对象
@ -98,6 +120,6 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <param name="json"></param> /// <param name="json"></param>
/// <returns></returns> /// <returns></returns>
public List<T> GetObjects<T>(string json) => JsonManager.GetObjects<T>(json, JsonSerializerOptions); public List<T> GetObjects<T>(string json) => JsonManager.GetObjects<T>(json, Options);
} }
} }

View File

@ -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.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
@ -41,6 +42,11 @@ namespace Milimoe.FunGame.Core.Controller
/// <returns></returns> /// <returns></returns>
public void Error(Exception e) => MaskMethod_Error(e); public void Error(Exception e) => MaskMethod_Error(e);
/// <summary>
/// JSON 工具类对象
/// </summary>
public JsonTool JSON { get; } = new();
/// <summary> /// <summary>
/// 新建一个BaseAddonController /// 新建一个BaseAddonController
/// </summary> /// </summary>

View File

@ -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.Api.Utility;
using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Interface.Addons;
using Milimoe.FunGame.Core.Library.SQLScript.Common; using Milimoe.FunGame.Core.Library.SQLScript.Common;
@ -17,7 +17,7 @@ namespace Milimoe.FunGame.Core.Controller
public class ServerAddonController<T>(IAddon addon, Dictionary<string, object> delegates) : BaseAddonController<T>(addon, delegates), IServerAddon where T : IAddon public class ServerAddonController<T>(IAddon addon, Dictionary<string, object> delegates) : BaseAddonController<T>(addon, delegates), IServerAddon where T : IAddon
{ {
/// <summary> /// <summary>
/// 数据库连接器 /// 数据库连接器 [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用:<see cref="GetSQLHelper"/> ]
/// </summary> /// </summary>
public SQLHelper? SQLHelper => _sqlHelper; public SQLHelper? SQLHelper => _sqlHelper;
@ -32,7 +32,16 @@ namespace Milimoe.FunGame.Core.Controller
private CancellationTokenSource? _cts = null; private CancellationTokenSource? _cts = null;
/// <summary> /// <summary>
/// 新建 SQLHelper /// 获取一个可以用来进行事务操作、更新/新增数据的数据库连接器 [ 请使用 using Controller.GetSQLHelper() 来让它能够自动释放 ]
/// </summary>
/// <returns></returns>
public SQLHelper? GetSQLHelper()
{
return Factory.OpenFactory.GetSQLHelper();
}
/// <summary>
/// 新建 SQLHelper [ 后台长连接仅查询专用,请勿用于事务、更新和新增,对应需求请使用:<see cref="GetSQLHelper"/> ]
/// </summary> /// </summary>
public void NewSQLHelper() public void NewSQLHelper()
{ {
@ -55,7 +64,7 @@ namespace Milimoe.FunGame.Core.Controller
// 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线 // 每两小时触发一次SQL服务器的心跳查询防止SQL服务器掉线
try try
{ {
await Task.Delay(2 * 1000 * 3600); await Task.Delay(2 * 1000 * 3600, _cts.Token);
_sqlHelper?.ExecuteDataSet(ServerLoginLogs.Select_GetLastLoginTime()); _sqlHelper?.ExecuteDataSet(ServerLoginLogs.Select_GetLastLoginTime());
} }
catch (OperationCanceledException) catch (OperationCanceledException)