using ServerBase; using ServerCore; using System.Reflection; using static ControlCenter.NamedPipeHost.Extensions.ExtensionsForClient; namespace BrokerApiServer; public static class BrokerServiceExtensions { public static void AddBrokerServerService(this IServiceCollection services, string[] args) { var server = new BrokerServerService(); _ = server.Run(args); server.WaitOnStart().Wait(); var broker_server_config = AppBuilderExtensions.initBrokerServerConfig(); services.AddSingleton(server); services.AddSingleton(server.ServerLogic); services.AddSingleton(x => server.ServerLogic.getServerConfig()); services.AddSingleton(x => server.ServerLogic.getDynamoDbClient()); services.addCoreServices(broker_server_config); services.addInfraServices(broker_server_config); services.AddHttpContextAccessor(); services.AddEndpointsApiExplorer(); services.AddControllers(options => { options.Filters.Add(new ResultExceptionFilter()); }); services.AddHealthChecks(); services.AddSwaggerGen(SwaggerSettingHelper.setSwaggerGen); var useControlCenter = broker_server_config.ServiceType != nameof(ServiceType.Dev); if (useControlCenter) { var assemblies = new List(AppDomain.CurrentDomain.GetAssemblies()); services.AddNamedPipelineClientManager(assemblies, ServerControlCenter.ServerType.BrokerApi, nameof(ServiceCategory.Caliverse), NetworkHelper.getEthernetLocalIPv4(), server.Options.Port); } } public static void UseBrokerServerService(this WebApplication app) { var server = app.Services.GetRequiredService(); app.UseCors("Everything"); app.UseHttpsRedirection(); app.UseMiddleware(); app.UseAuthorization(); app.UseRouting(); app.MapControllers(); if (server.Options.UseSwagger) { app.UseSwagger(); app.UseSwaggerUI(); } app.MapHealthChecks("/healthcheck"); app.metadataMangerInit(); app.validateRepoConnections(); var useControlCenter = server.ServerLogic.getServerConfig().ServiceType != nameof(ServiceType.Dev); if (useControlCenter) { app.UseNamedPipelineClientManager(); } // 호스트 시작 종료 콜백 처리 var logger = Log.getLogger(); var serviceProvider = app.Services; serviceProvider.GetRequiredService().ApplicationStarted.Register(() => { logger.Info($"Broker Api Server Service Started"); }); serviceProvider.GetRequiredService().ApplicationStopped.Register(Log.shutdown); } }