FunGame-Core/Controller/BaseAddonController.cs
milimoe d23c6597d1
完善 HTTPClient;添加日志级别;添加匿名服务器模组;修复不同时间多客户端连接游戏模组时可能产生的线程安全问题 (#106)
* 完善 HTTPClient;添加日志级别;添加匿名服务器模组(此模组不强制要求登录、客户端安装)

* 添加参数

* 添加 null 检查

* 修复不同时间多客户端连接游戏模组时可能产生的线程安全问题
2025-01-17 18:58:51 +08:00

80 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Milimoe.FunGame.Core.Interface.Addons;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Controller
{
/// <summary>
/// 这是通用的控制器,仅提供基本功能
/// </summary>
/// <typeparam name="T">Addon的类型如 <see cref="GameModule"/> 或者 <see cref="Plugin"/> / <see cref="ServerPlugin"/> / <see cref="WebAPIPlugin"/></typeparam>
public class BaseAddonController<T> where T : IAddon
{
/// <summary>
/// 控制器的本体
/// </summary>
public T Addon { get; }
/// <summary>
/// 输出系统消息
/// </summary>
protected Action<string, string, LogLevel, bool> MaskMethod_WriteLine { get; set; }
/// <summary>
/// 输出错误消息
/// </summary>
protected Action<Exception> MaskMethod_Error { get; set; }
/// <summary>
/// 输出系统消息
/// </summary>
/// <param name="msg"></param>
/// <param name="level"></param>
/// <param name="useLevel"></param>
/// <returns></returns>
public void WriteLine(string msg, LogLevel level = LogLevel.Info, bool useLevel = true) => MaskMethod_WriteLine(Addon.Name, msg, level, useLevel);
/// <summary>
/// 输出错误消息
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public void Error(Exception e) => MaskMethod_Error(e);
/// <summary>
/// 新建一个BaseAddonController
/// </summary>
/// <param name="addon"></param>
/// <param name="delegates"></param>
public BaseAddonController(IAddon addon, Dictionary<string, object> delegates)
{
Addon = (T)addon;
if (delegates.TryGetValue("WriteLine", out object? value)) MaskMethod_WriteLine = value != null ? (Action<string, string, LogLevel, bool>)value : new(DefaultPrint);
if (delegates.TryGetValue("Error", out value)) MaskMethod_Error = value != null ? (Action<Exception>)value : new(DefaultPrint);
MaskMethod_WriteLine ??= new(DefaultPrint);
MaskMethod_Error ??= new(DefaultPrint);
}
/// <summary>
/// 默认的输出错误消息方法
/// </summary>
/// <param name="name"></param>
/// <param name="msg"></param>
/// <param name="level"></param>
/// <param name="useLevel"></param>
/// <returns></returns>
private void DefaultPrint(string name, string msg, LogLevel level = LogLevel.Info, bool useLevel = true)
{
DateTime now = DateTime.Now;
Console.Write("\r" + now.AddMilliseconds(-now.Millisecond).ToString() + $" {CommonSet.GetLogLevelPrefix(level)}/[Addon] {Addon.Name}\n\r> ");
}
/// <summary>
/// 输出错误消息
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
private void DefaultPrint(Exception e) => DefaultPrint(Addon.Name, e.ToString(), LogLevel.Error);
}
}