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