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();
}
}