using Microsoft.Extensions.Logging.Console; using MoonlightServers.Daemon.Configuration; using MoonlightServers.Daemon.Helpers; using MoonlightServers.Daemon.Implementations.TokenScheme; using MoonlightServers.Daemon.ServerSystem; using MoonlightServers.Daemon.ServerSystem.Implementations.Docker; using MoonlightServers.Daemon.ServerSystem.Implementations.Local; using MoonlightServers.Daemon.Services; using MoonlightServers.DaemonShared.Http; var builder = WebApplication.CreateBuilder(args); // Configure logging builder.Logging.ClearProviders(); builder.Logging.AddConsole(options => { options.FormatterName = nameof(AppConsoleFormatter); }); builder.Logging.AddConsoleFormatter(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddDockerServices(); builder.Services.AddLocalServices(); builder.Services.AddHttpClient(); builder.Services.AddSingleton(); builder.Services.AddOptions().BindConfiguration("Moonlight:Remote"); var remoteOptions = new RemoteOptions(); builder.Configuration.Bind("Moonlight:Remote", remoteOptions); builder.Services.AddControllers() .AddApplicationPart(typeof(Program).Assembly) .AddJsonOptions(options => { options.JsonSerializerOptions.TypeInfoResolverChain.Add(SerializationContext.Default); }); builder.Services.AddAuthentication(TokenSchemeHandler.SchemeName) .AddScheme(TokenSchemeHandler.SchemeName, options => { options.Token = remoteOptions!.Token; }); builder.Logging.AddFilter("MoonlightServers.Daemon.Implementations.TokenScheme.TokenSchemeHandler", LogLevel.Warning); var app = builder.Build(); app.UseAuthorization(); app.MapControllers(); Task.Run(async () => { Console.ReadLine(); try { var serverService = app.Services.GetRequiredService(); await serverService.SyncAsync("a0e3ddb4-2c72-4f4c-bc49-35650a4bc5c0"); await serverService.SyncAsync("a0e3ddb4-2c72-4f4c-bc49-35650a4bc5c0"); var server = await serverService.GetAsync("a0e3ddb4-2c72-4f4c-bc49-35650a4bc5c0"); if(server == null) return; Console.WriteLine($"Server: {server.State}"); if (server.State == ServerState.Offline) await server.StartAsync(); else await server.StopAsync(); Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e); throw; } }); app.Run();