using Microsoft.Extensions.Options; using Vanguard.Content; using Vanguard.Rules.Cards; using Vanguard.Server.Api; using Vanguard.Server.Configuration; using Vanguard.Server.Matches; using Vanguard.Server.Matchmaking; using Vanguard.Server.Profiles; using Vanguard.Server.Realtime; using Vanguard.Server.Tickets; var builder = WebApplication.CreateBuilder(args); builder.Services.Configure(builder.Configuration.GetSection("Game")); builder.Services.Configure(builder.Configuration.GetSection("Content")); builder.Services.AddSingleton(sp => sp.GetRequiredService>().Value); builder.Services.AddSingleton(sp => sp.GetRequiredService>().Value); builder.Services.AddSingleton(TimeProvider.System); builder.Services.AddSingleton(sp => { var content = sp.GetRequiredService(); var directory = ContentPaths.Resolve(content.Path); return CatalogLoader.LoadDirectory(directory); }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(sp => sp.GetRequiredService()); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddHostedService(); builder.Services.AddHostedService(); var app = builder.Build(); // каталог грузим сразу: сервер без карт бесполезен, лучше упасть на старте app.Services.GetRequiredService(); app.UseWebSockets(new WebSocketOptions { KeepAliveInterval = TimeSpan.FromSeconds(30), }); app.MapGameApi(); app.Map("/game", GameWebSocketEndpoint.HandleAsync); app.Run(); /// Точка входа доступна интеграционным тестам через WebApplicationFactory. public partial class Program { }