using System.Collections; using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Interface.Addons; using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Core.Controller { /// /// 这个控制器在Base的基础上添加了DataRequest /// /// public class AddonController : BaseAddonController where T : IAddon { /// /// 基于本地已连接的Socket创建新的数据请求 /// private Func MaskMethod_NewDataRequest { get; set; } /// /// 基于本地已连接的Socket创建长时间运行的数据请求 /// private Func MaskMethod_NewLongRunningDataRequest { get; set; } /// /// 基于本地已连接的Socket创建新的数据请求 /// /// /// /// public DataRequest NewDataRequest(DataRequestType type) { if (typeof(T).IsAssignableFrom(typeof(IGameModuleServer))) { throw new ModuleServerNewDataRequestException(); } return MaskMethod_NewDataRequest(type); } /// /// 基于本地已连接的Socket创建长时间运行的数据请求 /// /// /// /// public DataRequest NewLongRunningDataRequest(DataRequestType type) { if (typeof(T).IsAssignableFrom(typeof(IGameModuleServer))) { throw new ModuleServerNewDataRequestException(); } return MaskMethod_NewLongRunningDataRequest(type); } /// /// 新建一个AddonController /// /// /// public AddonController(IAddon addon, Hashtable delegates) : base(addon, delegates) { if (delegates.ContainsKey("NewDataRequest")) MaskMethod_NewDataRequest = delegates["NewDataRequest"] != null ? (Func)delegates["NewDataRequest"]! : new(DefaultNewDataRequest); if (delegates.ContainsKey("NewLongRunningDataRequest")) MaskMethod_NewLongRunningDataRequest = delegates["NewLongRunningDataRequest"] != null ? (Func)delegates["NewLongRunningDataRequest"]! : new(DefaultNewDataRequest); MaskMethod_NewDataRequest ??= new(DefaultNewDataRequest); MaskMethod_NewLongRunningDataRequest ??= new(DefaultNewDataRequest); } private DataRequest DefaultNewDataRequest(DataRequestType type) => throw new ConnectFailedException(); } }