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