Files
caliverse_server/BrokerApiServer/BrokerServiceExtensions.cs
2025-11-28 16:54:56 +09:00

74 lines
2.5 KiB
C#

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<IServerLogic>(server.ServerLogic);
services.AddSingleton<ServerConfig>(x => server.ServerLogic.getServerConfig());
services.AddSingleton<DynamoDbClient>(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<Assembly>(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<BrokerServerService>();
app.UseCors("Everything");
app.UseHttpsRedirection();
app.UseMiddleware<ResultLoggingMiddleware>();
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<IHostApplicationLifetime>().ApplicationStarted.Register(() =>
{
logger.Info($"Broker Api Server Service Started");
});
serviceProvider.GetRequiredService<IHostApplicationLifetime>().ApplicationStopped.Register(Log.shutdown);
}
}