using XFEExtension.NetCore.AutoImplement;
using XFEExtension.NetCore.ServerInteractive.Exceptions;
using XFEExtension.NetCore.ServerInteractive.Implements;
using XFEExtension.NetCore.ServerInteractive.Interfaces.ServerService;
namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server;
///
/// XFE服务器构建器
///
[CreateImpl]
public abstract class XFEServerBuilder : XFEBuilderBase
{
private bool _addedProcessServiced;
private IServerCoreProcessService? _serverCoreProcess;
private readonly List _serverCoreServiceList = [];
///
/// 服务器实例
///
public XFEServer XFEServer { get; init; } = new XFEServerImpl();
///
/// 创建构建器
///
/// XFE服务器构建器
public static XFEServerBuilder CreateBuilder() => new XFEServerBuilderImpl();
///
/// 添加服务
///
/// 服务对象
/// XFE服务器构建器
public XFEServerBuilder AddService(IServerService serverService)
{
serverService.XFEServer = XFEServer;
XFEServer.ServerServiceList.Add(serverService);
return this;
}
///
/// 添加服务
///
/// 服务泛型
/// XFE服务器构建器
public XFEServerBuilder AddService() where T : IServerService, new() => AddService(new T());
///
/// 添加异步服务
///
/// 异步服务对象
/// XFE服务器构建器
public XFEServerBuilder AddAsyncService(IAsyncServerService asyncServerService)
{
asyncServerService.XFEServer = XFEServer;
XFEServer.AsyncServerServiceList.Add(asyncServerService);
return this;
}
///
/// 添加异步服务
///
/// 异步服务泛型
/// XFE服务器构建器
public XFEServerBuilder AddAsyncService() where T : IAsyncServerService, new() => AddAsyncService(new T());
///
/// 添加初始化服务
///
/// 初始化服务对象
/// XFE服务器构建器
public XFEServerBuilder AddInitializer(IServerInitializerService serverInitializerService)
{
serverInitializerService.XFEServer = XFEServer;
XFEServer.ServerInitializerServiceList.Add(serverInitializerService);
return this;
}
///
/// 添加初始化服务
///
/// 初始化服务泛型
/// XFE服务器构建器
public XFEServerBuilder AddInitializer() where T : IServerInitializerService, new() => AddInitializer(new T());
///
/// 添加核心服务
///
/// 核心服务对象
/// XFE服务器构建器
public XFEServerBuilder AddServerCore(IServerCoreService serverCoreService)
{
serverCoreService.XFEServer = XFEServer;
_serverCoreServiceList.Add(serverCoreService);
return this;
}
///
/// 添加核心服务
///
/// 核心服务泛型
/// XFE服务器构建器
public XFEServerBuilder AddServerCore() where T : IServerCoreService, new() => AddServerCore(new T());
///
/// 添加核心服务处理程序
///
/// 核心服务处理程序对象
/// XFE服务器构建器
/// XFE服务器构建器异常
public XFEServerBuilder AddCoreProcessor(IServerCoreProcessService serverCoreProcessService)
{
if (_addedProcessServiced)
throw new XFEServerBuilderException("已经添加过处理器,处理器仅能添加一个!");
_addedProcessServiced = true;
_serverCoreProcess = serverCoreProcessService ?? throw new XFEServerBuilderException("处理器为空", new ArgumentNullException(nameof(serverCoreProcessService)));
return this;
}
///
/// 添加核心服务处理程序
///
/// 核心服务处理程序泛型
/// XFE服务器构建器
public XFEServerBuilder AddCoreProcessor() where T : IServerCoreProcessService, new() => AddCoreProcessor(new T());
///
/// 构建XFE服务器
///
/// XFE服务器
/// 未添加核心处理器异常
public XFEServer Build()
{
if (!_addedProcessServiced || _serverCoreProcess is null)
throw new XFEServerBuilderException("未添加核心处理器!");
_serverCoreProcess.ServerCoreServiceList = _serverCoreServiceList;
XFEServer.ServerCoreProcessService = _serverCoreProcess;
return XFEServer;
}
}