using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Interface; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Controller { public class AddonController { private IAddon Addon { get; } /// /// 输出系统消息 /// private Action MaskMethod_WriteLine { get; set; } = new(msg => Console.Write("\r" + msg + "\n\r> ")); /// /// 基于本地已连接的Socket创建新的数据请求 /// private Func MaskMethod_NewDataRequest { get; set; } /// /// 基于本地已连接的Socket创建长时间运行的数据请求 /// private Func MaskMethod_NewLongRunningDataRequest { get; set; } /// /// 输出系统消息 /// /// /// public void WriteLine(string msg) => MaskMethod_WriteLine(msg); /// /// 基于本地已连接的Socket创建新的数据请求 /// 请勿在 中调用此方法 /// /// /// public DataRequest NewDataRequest(DataRequestType type) => MaskMethod_NewDataRequest(type); /// /// 基于本地已连接的Socket创建长时间运行的数据请求 /// 请勿在 中调用此方法 /// /// /// public DataRequest NewLongRunningDataRequest(DataRequestType type) => MaskMethod_NewLongRunningDataRequest(type); /// /// 新建一个AddonController /// /// /// public AddonController(IAddon Addon, Delegate[] delegates) { this.Addon = Addon; if (delegates.Length > 0) MaskMethod_WriteLine = (Action)delegates[0]; if (delegates.Length > 1) MaskMethod_NewDataRequest = (Func)delegates[1]; if (delegates.Length > 2) MaskMethod_NewLongRunningDataRequest = (Func)delegates[2]; MaskMethod_NewDataRequest ??= new(DefaultNewDataRequest); MaskMethod_NewLongRunningDataRequest ??= new(DefaultNewDataRequest); } private DataRequest DefaultNewDataRequest(DataRequestType type) { if (Addon is IGameModeServer) throw new NotSupportedException("请勿在GameModeServer类中调用此方法"); else throw new ConnectFailedException(); } } }