LANCommander/LANCommander.Server/Startup/Servers.cs

55 lines
1.8 KiB
C#
Raw Permalink Normal View History

2025-03-11 21:21:16 -05:00
using LANCommander.Server.Data;
using LANCommander.Server.Data.Enums;
using LANCommander.Server.Hubs;
2025-03-11 21:21:16 -05:00
using LANCommander.Server.Services;
using LANCommander.Server.Services.Abstractions;
using LANCommander.Server.Settings.Enums;
using Microsoft.AspNetCore.SignalR;
2025-03-11 21:21:16 -05:00
namespace LANCommander.Server.Startup;
public static class Servers
{
public static WebApplicationBuilder AddServerProcessStatusMonitor(this WebApplicationBuilder builder)
{
builder.Services.AddSingleton<ServerEngineStatusService>();
return builder;
}
public static async Task StartServersAsync(this WebApplication app)
2025-03-11 21:21:16 -05:00
{
if (DatabaseContext.Provider != DatabaseProvider.Unknown)
{
using var scope = app.Services.CreateScope();
var serverManager = scope.ServiceProvider.GetRequiredService<ServerManager>();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
// Initialize engines and prime tracking before starting anything.
await serverManager.InitializeAsync();
2025-03-11 21:21:16 -05:00
logger.LogDebug("Autostarting Servers");
2025-03-11 21:21:16 -05:00
// Autostart IPX relay
scope.ServiceProvider.GetService<IPXRelayService>();
await serverManager.AutostartApplicationServersAsync();
2025-03-11 21:21:16 -05:00
}
}
public class ServerEngineStatusService
{
public ServerEngineStatusService(
IServiceProvider serviceProvider,
IHubContext<GameServerHub> hubContext)
{
foreach (var engine in serviceProvider.GetServices<IServerEngine>())
{
engine.OnServerStatusUpdate += async (sender, args) =>
{
await hubContext.Clients.All.SendAsync("StatusUpdate", args.Status.ToString());
};
}
}
}
2025-03-11 21:21:16 -05:00
}