using CatLink.Relay; var builder = WebApplication.CreateBuilder(args); // Add services builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure middleware if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); // Get configuration var httpPort = builder.Configuration.GetValue("HttpPort", 20100); var relayPort = builder.Configuration.GetValue("RelayPort", 20101); var logger = app.Services.GetRequiredService>(); // Start TCP relay server var cts = new CancellationTokenSource(); var relayTask = Task.Run(async () => { var relay = new FutariRelay(relayPort, cts.Token, app.Services.GetRequiredService>(), app.Services); await relay.StartAsync(); }, cts.Token); logger.LogInformation("CatLink Relay Server starting..."); logger.LogInformation("HTTP API listening on port {HttpPort}", httpPort); logger.LogInformation("TCP Relay listening on port {RelayPort}", relayPort); // Handle shutdown AppDomain.CurrentDomain.ProcessExit += (sender, e) => { logger.LogInformation("Shutting down..."); cts.Cancel(); }; // Run the web server app.Run($"http://0.0.0.0:{httpPort}");