2025-03-15 21:00:00 -05:00
|
|
|
using LANCommander.SDK;
|
2025-12-23 21:12:06 -06:00
|
|
|
using LANCommander.SDK.Abstractions;
|
2025-11-16 12:31:25 -06:00
|
|
|
using LANCommander.SDK.Interceptors;
|
2025-04-09 19:44:07 -05:00
|
|
|
using LANCommander.SDK.Models;
|
2025-12-10 20:55:38 -06:00
|
|
|
using LANCommander.SDK.PowerShell;
|
2025-11-17 22:09:19 -06:00
|
|
|
using LANCommander.SDK.Services;
|
2025-03-16 14:36:17 -05:00
|
|
|
using LANCommander.Server.Services.Abstractions;
|
2025-03-15 21:00:00 -05:00
|
|
|
using LANCommander.Server.Services.Factories;
|
2025-11-16 12:31:25 -06:00
|
|
|
using LANCommander.Server.Services.Interceptors;
|
2025-03-15 21:00:00 -05:00
|
|
|
using LANCommander.Server.Services.MediaGrabbers;
|
2025-12-10 20:55:38 -06:00
|
|
|
using LANCommander.Server.Services.PowerShell;
|
2026-05-07 01:11:41 -05:00
|
|
|
using LANCommander.HQ.SDK;
|
2025-12-23 21:12:06 -06:00
|
|
|
using LANCommander.Server.Services.Providers;
|
2026-03-03 22:29:41 -06:00
|
|
|
using LANCommander.Server.Services.Providers.Metadata;
|
2025-03-23 20:19:18 -05:00
|
|
|
using LANCommander.Server.Services.ServerEngines;
|
2025-03-15 21:00:00 -05:00
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
|
|
|
|
namespace LANCommander.Server.Services.Extensions;
|
|
|
|
|
|
|
|
|
|
public static class IServiceCollectionExtensions
|
|
|
|
|
{
|
2025-11-16 12:31:25 -06:00
|
|
|
public static IServiceCollection AddLANCommanderServer(this IServiceCollection services)
|
2025-03-15 21:00:00 -05:00
|
|
|
{
|
2025-03-16 19:37:23 -05:00
|
|
|
services.AddScoped<IGitHubService, GitHubService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<IdentityContextFactory>();
|
2025-07-30 20:42:15 -05:00
|
|
|
services.AddScoped<AuthenticationService>();
|
2025-11-17 22:09:03 -06:00
|
|
|
services.AddScoped<ArchiveService>();
|
2025-11-17 22:09:19 -06:00
|
|
|
services.AddScoped<IArchiveClient, ArchiveService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<StorageLocationService>();
|
2025-07-19 17:39:55 -05:00
|
|
|
services.AddScoped<ActionService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<CategoryService>();
|
|
|
|
|
services.AddScoped<CollectionService>();
|
|
|
|
|
services.AddScoped<GameService>();
|
2026-06-27 11:03:34 -05:00
|
|
|
services.AddScoped<GameVersionService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<LibraryService>();
|
|
|
|
|
services.AddScoped<ScriptService>();
|
2026-06-28 23:02:35 -05:00
|
|
|
services.AddScoped<ModuleService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<GenreService>();
|
|
|
|
|
services.AddScoped<PlatformService>();
|
|
|
|
|
services.AddScoped<KeyService>();
|
|
|
|
|
services.AddScoped<TagService>();
|
|
|
|
|
services.AddScoped<EngineService>();
|
|
|
|
|
services.AddScoped<CompanyService>();
|
2025-07-19 17:39:55 -05:00
|
|
|
services.AddScoped<MultiplayerModeService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<ServerService>();
|
2025-07-19 17:39:55 -05:00
|
|
|
services.AddScoped<ServerHttpPathService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<ServerConsoleService>();
|
|
|
|
|
services.AddScoped<GameSaveService>();
|
2025-07-19 17:39:55 -05:00
|
|
|
services.AddScoped<SavePathService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<PlaySessionService>();
|
|
|
|
|
services.AddScoped<MediaService>();
|
|
|
|
|
services.AddScoped<RedistributableService>();
|
2026-05-16 19:28:04 -05:00
|
|
|
services.AddScoped<ConfigToOptionSchemaService>();
|
2026-02-08 02:24:53 -06:00
|
|
|
services.AddScoped<ToolService>();
|
2026-05-07 01:11:41 -05:00
|
|
|
services.AddScoped(sp =>
|
|
|
|
|
{
|
|
|
|
|
var settings = sp.GetRequiredService<SettingsProvider<Settings.Settings>>();
|
|
|
|
|
var hqSettings = settings.CurrentValue.Server.HQ;
|
|
|
|
|
return new HQClient(new HQClientOptions
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(hqSettings.BaseUrl),
|
|
|
|
|
Token = hqSettings.IsAuthenticated ? hqSettings.AccessToken : null,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
services.AddScoped<HqMediaGrabber>();
|
2026-04-24 02:05:56 -05:00
|
|
|
services.AddScoped<SteamMediaGrabber>();
|
|
|
|
|
services.AddScoped<SteamGridDBMediaGrabber>();
|
|
|
|
|
services.AddScoped<YouTubeMediaGrabber>();
|
|
|
|
|
services.AddScoped<IMediaGrabberService, CompositeMediaGrabberService>();
|
2026-04-24 02:26:09 -05:00
|
|
|
services.AddScoped<MediaToolService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddScoped<UpdateService>();
|
|
|
|
|
services.AddScoped<IssueService>();
|
|
|
|
|
services.AddScoped<PageService>();
|
|
|
|
|
services.AddScoped<UserService>();
|
|
|
|
|
services.AddScoped<RoleService>();
|
|
|
|
|
services.AddScoped<UserCustomFieldService>();
|
2025-07-25 17:57:33 -05:00
|
|
|
services.AddScoped<GameCustomFieldService>();
|
2025-08-19 03:08:30 -05:00
|
|
|
services.AddScoped<ChatService>();
|
|
|
|
|
services.AddScoped<ChatMessageService>();
|
|
|
|
|
services.AddScoped<ChatThreadService>();
|
2025-11-12 18:26:25 -06:00
|
|
|
services.AddScoped<ChatThreadReadStatusService>();
|
2026-04-25 13:59:24 -05:00
|
|
|
services.AddScoped<DepotService>();
|
2026-04-25 14:44:12 -05:00
|
|
|
services.AddScoped<RatingService>();
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddTransient<SetupService>();
|
2025-04-09 19:44:07 -05:00
|
|
|
|
2026-03-03 22:29:41 -06:00
|
|
|
// Register metadata providers
|
|
|
|
|
services.AddScoped<MetadataService>();
|
2026-05-07 01:11:41 -05:00
|
|
|
services.AddScoped<IMetadataProvider, HqMetadataProvider>();
|
2026-03-03 22:29:41 -06:00
|
|
|
services.AddScoped<IMetadataProvider, IgdbMetadataProvider>();
|
|
|
|
|
services.AddScoped<IMetadataProvider, PcGamingWikiMetadataProvider>();
|
|
|
|
|
|
2025-03-25 20:48:19 -05:00
|
|
|
// Register server engines
|
2025-03-24 00:19:33 -05:00
|
|
|
services.AddSingleton<IServerEngine, LocalServerEngine>();
|
2025-03-25 20:48:19 -05:00
|
|
|
|
|
|
|
|
services.AddSingleton<DockerServerEngine>();
|
|
|
|
|
services.AddSingleton<IServerEngine>(provider => provider.GetService<DockerServerEngine>());
|
2026-03-08 13:49:30 -05:00
|
|
|
|
|
|
|
|
services.AddSingleton<RemoteServerEngine>();
|
|
|
|
|
services.AddSingleton<IServerEngine>(provider => provider.GetService<RemoteServerEngine>());
|
2026-06-13 23:51:37 -05:00
|
|
|
|
|
|
|
|
services.AddSingleton<ServerManager>();
|
|
|
|
|
|
2026-06-14 00:53:19 -05:00
|
|
|
services.AddSingleton<PlaySessionKeepAliveTracker>();
|
|
|
|
|
services.AddHostedService<PlaySessionSweepService>();
|
|
|
|
|
|
2025-12-10 20:55:38 -06:00
|
|
|
services.AddSingleton<ScriptDebugger>();
|
|
|
|
|
services.AddSingleton<IScriptDebugger>(sp =>
|
|
|
|
|
sp.GetRequiredService<ScriptDebugger>());
|
|
|
|
|
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddSingleton<IPXRelayService>();
|
2025-11-16 12:31:25 -06:00
|
|
|
services.AddSingleton<IBeaconMessageInterceptor, BeaconMessageInterceptor>();
|
2025-07-19 17:39:55 -05:00
|
|
|
|
2026-07-02 18:09:14 -05:00
|
|
|
// Mapperly mappers (stateless, thread-safe compile-time source generators).
|
|
|
|
|
services.AddSingleton<Mappers.SdkMapper>();
|
|
|
|
|
services.AddSingleton<Mappers.ManifestMapper>();
|
|
|
|
|
|
2025-03-15 21:00:00 -05:00
|
|
|
services.AddFusionCache();
|
|
|
|
|
|
|
|
|
|
return services;
|
|
|
|
|
}
|
|
|
|
|
}
|