14 KiB
| title | sidebar_label | sidebar_position |
|---|---|---|
| API Reference | API Reference | 4 |
{/* This file is generated by LANCommander.PluginDocsGenerator. Do not edit by hand. /} {/ Regenerate with: dotnet run --project LANCommander.PluginDocsGenerator */}
Plugin API Reference
This reference is generated directly from the plugin contract assemblies and their XML documentation comments, so it always reflects the extension surface of the installed version. Types are grouped by namespace. Interfaces you implement in a plugin are listed first within each group.
LANCommander.SDK.Plugins
IPlugin
interface — LANCommander.SDK.Plugins.IPlugin
The entry point contract every LANCommander plugin implements. Plugins are discovered from the host's Plugins drop-in folder and loaded once at startup.
Properties
string Id { get; }- Stable, globally unique identifier (e.g. "com.acme.myplugin").
string Name { get; }- Human readable display name.
string Version { get; }- Plugin version (SemVer recommended).
string Author { get; }- Plugin author.
Methods
void ConfigureServices(IServiceCollection services)- Registers the plugin's own services into the host's DI container. Called during host startup before the service provider is built, so implementations must only register services and must not attempt to resolve them.
Task InitializeAsync(PluginContext context, CancellationToken cancellationToken)- Asynchronous startup hook, invoked after the host's service provider is built. Use this to resolve services, subscribe to lifecycle events, register UI extensions, etc.
IPluginEventBus
interface — LANCommander.SDK.Plugins.IPluginEventBus
A minimal in-process, strongly-typed event aggregator that lets plugins react to host lifecycle events (game install/launch/uninstall, login, etc.). Registered as a singleton in both hosts.
Methods
IDisposable Subscribe<TEvent>(Func<TEvent, CancellationToken, Task> handler)- Subscribes a handler to events of type
TEvent.
- Subscribes a handler to events of type
Task PublishAsync<TEvent>(TEvent event, CancellationToken cancellationToken)- Publishes an event to all subscribed handlers. Each handler is awaited and isolated so a throwing handler cannot break the publisher or other handlers.
IPluginPowerShellExtension
interface — LANCommander.SDK.Plugins.IPluginPowerShellExtension
Implemented by plugins that want to add PowerShell cmdlets or script modules into the LANCommander runspace. Register the implementation in ConfigureServices; the SDK's PowerShell runspace picks up all registered extensions when a script is executed.
Methods
IEnumerable<Type> GetCmdletTypes()- Returns cmdlet types (classes decorated with
[Cmdlet]) to register into each runspace.
- Returns cmdlet types (classes decorated with
IEnumerable<string> GetModulePaths()- Returns absolute paths to PowerShell script modules (.psm1/.psd1) shipped with the plugin that should be imported into each runspace.
LANCommanderPluginAttribute
attribute — LANCommander.SDK.Plugins.LANCommanderPluginAttribute
Assembly-level attribute that marks an assembly as a LANCommander plugin and declares its entry point and compatibility metadata. This is the primary discovery mechanism used by the loader.
Properties
Type EntryPoint { get; }- The concrete type implementing
IPluginthat serves as the entry point.
- The concrete type implementing
string Id { get; set; }- Optional override for the plugin id; when null the loader falls back to the instance's
Id.
- Optional override for the plugin id; when null the loader falls back to the instance's
string MinHostVersion { get; set; }- Minimum compatible host (SDK) version, inclusive. Null means no lower bound.
string MaxHostVersion { get; set; }- Maximum compatible host (SDK) version, inclusive. Null means no upper bound.
PluginHost Hosts { get; set; }- The hosts this plugin supports. Defaults to both server and launcher.
PluginBootstrap
class — LANCommander.SDK.Plugins.PluginBootstrap
Convenience helper that centralizes plugin discovery so every host wires it identically. Call ConfigurePlugins as the last step while populating the service collection (before building the provider), then call InitializeAllAsync on the returned loader after the provider is built.
Methods
PluginLoaderService ConfigurePlugins(IServiceCollection services, PluginHost host)- Discovers plugins for
hostfrom<config>/Plugins, lets each register its services intoservices, and registers the loader as a singleton so the same instance can drive Phase 2 initialization.
- Discovers plugins for
PluginContext
class — LANCommander.SDK.Plugins.PluginContext
Runtime context handed to a plugin during InitializeAsync.
Properties
PluginHost Host { get; init; }- The host the plugin is running inside (a single value, never a flags combination).
IServiceProvider Services { get; init; }- The fully built host service provider (scoped per plugin during initialization).
string PluginDirectory { get; init; }- Absolute path to the folder the plugin was loaded from.
ILogger Logger { get; init; }- Logger scoped to the plugin.
PluginEventBus
class — LANCommander.SDK.Plugins.PluginEventBus
Methods
IDisposable Subscribe<TEvent>(Func<TEvent, CancellationToken, Task> handler)Task PublishAsync<TEvent>(TEvent event, CancellationToken cancellationToken)
PluginLoadContext
class — LANCommander.SDK.Plugins.PluginLoadContext
An isolated AssemblyLoadContext for a single plugin. Uses an AssemblyDependencyResolver to resolve the plugin's private dependencies while deferring host-provided assemblies (the SDK, DI abstractions, Avalonia, etc.) to the default context so that shared types keep a single identity across the ALC boundary.
PluginLoaderService
class — LANCommander.SDK.Plugins.PluginLoaderService
Discovers, loads, and initializes plugins from a drop-in folder. Split into two phases to match the "build the DI container once" constraint: DiscoverAndConfigure runs while the host is still populating its IServiceCollection (before the provider is built).InitializeAllAsync runs after the provider has been built.
Properties
IReadOnlyList<PluginManifest> LoadedPlugins { get; }- Plugins successfully loaded and configured during discovery.
Methods
void DiscoverAndConfigure(IServiceCollection services, PluginHost host, string pluginsRoot, string hostVersion, ILogger logger)- Phase 1: scans
pluginsRootfor plugins, loads each into its ownPluginLoadContext, applies host + version gates, instantiates the entry point, and lets it register services. A failure in one plugin never aborts the batch.
- Phase 1: scans
Task InitializeAllAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken)- Phase 2: invokes
InitializeAsyncfor every loaded plugin, each within its own DI scope. A failure in one plugin never aborts the others.
- Phase 2: invokes
PluginManifest
class — LANCommander.SDK.Plugins.PluginManifest
Parsed metadata describing a discovered plugin, derived from its LANCommanderPluginAttribute.
Properties
string Id { get; init; }Type EntryPoint { get; init; }string MinHostVersion { get; init; }string MaxHostVersion { get; init; }PluginHost Hosts { get; init; }Assembly Assembly { get; init; }- The assembly the plugin was loaded from.
string Directory { get; init; }- Absolute path to the folder the plugin was loaded from.
Methods
PluginManifest FromAttribute(LANCommanderPluginAttribute attribute, Assembly assembly, string directory)- Builds a manifest from an assembly-level plugin attribute.
PluginHost
enum — LANCommander.SDK.Plugins.PluginHost
Identifies which LANCommander host a plugin targets. Used both as a single value (the host a plugin is being loaded into) and as a flags set (the hosts a plugin declares support for).
| Value | Description |
|---|---|
None = 0 |
|
Server = 1 |
|
Launcher = 2 |
LANCommander.SDK.Plugins.Events
GameAfterExitEvent
record — LANCommander.SDK.Plugins.Events.GameAfterExitEvent
Raised immediately after a launched game process exits.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }
GameBeforeLaunchEvent
record — LANCommander.SDK.Plugins.Events.GameBeforeLaunchEvent
Raised immediately before a game's executable is launched.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }string Action { get; init; }
GameInstallFailedEvent
record — LANCommander.SDK.Plugins.Events.GameInstallFailedEvent
Raised when a game install fails.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }
GameInstalledEvent
record — LANCommander.SDK.Plugins.Events.GameInstalledEvent
Raised after a game has finished installing.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }
GameInstallingEvent
record — LANCommander.SDK.Plugins.Events.GameInstallingEvent
Raised just before a game install begins.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }
GameUninstalledEvent
record — LANCommander.SDK.Plugins.Events.GameUninstalledEvent
Raised after a game has finished uninstalling.
Properties
Guid GameId { get; init; }
GameUninstallingEvent
record — LANCommander.SDK.Plugins.Events.GameUninstallingEvent
Raised just before a game is uninstalled.
Properties
Guid GameId { get; init; }string InstallDirectory { get; init; }
InstallQueueChangedEvent
record — LANCommander.SDK.Plugins.Events.InstallQueueChangedEvent
Raised whenever the install/download queue changes.
UserLoggedInEvent
record — LANCommander.SDK.Plugins.Events.UserLoggedInEvent
Raised after a user successfully logs in.
Properties
Guid UserId { get; init; }string UserName { get; init; }
UserLoggedOutEvent
record — LANCommander.SDK.Plugins.Events.UserLoggedOutEvent
Raised after a user logs out.
Properties
Guid UserId { get; init; }string UserName { get; init; }
LANCommander.Launcher.Plugins.Extensions
IContextMenuExtension
interface — LANCommander.Launcher.Plugins.Extensions.IContextMenuExtension
Adds items to a game's context menu. Implementations are resolved from DI and their items appended to the consolidated game menu shown on covers and list rows.
Properties
int Order { get; }- Relative position among extension items; lower values appear first.
Methods
IEnumerable<Control> BuildMenuItems(Guid gameId)- Builds the menu items shown for the given game (typically
MenuItems).
- Builds the menu items shown for the given game (typically
IFooterExtension
interface — LANCommander.Launcher.Plugins.Extensions.IFooterExtension
Adds a control to the launcher shell's footer. Implementations are resolved from DI and rendered, ordered by Order, alongside the built-in footer items.
Properties
int Order { get; }- Relative position among extension items; lower values appear first.
Methods
Control BuildContent()- Builds the control rendered in the footer.
IGameDetailTabExtension
interface — LANCommander.Launcher.Plugins.Extensions.IGameDetailTabExtension
Adds an additional tab to a game's detail view. Implementations are resolved from DI and appended, ordered by Order, after the built-in tabs.
Properties
string Header { get; }- Header shown on the tab.
int Order { get; }- Relative position among extension tabs; lower values appear first.
Methods
Control BuildContent(Guid gameId)- Builds the control rendered inside the tab for the given game.
INavigationPageExtension
interface — LANCommander.Launcher.Plugins.Extensions.INavigationPageExtension
Adds a top-level navigable destination reachable from the launcher shell. The view model is registered with the IViewRegistry so the shell's content control can render the associated view when navigated to.
Properties
string Label { get; }- Label shown for the navigation entry.
int Order { get; }- Relative position among extension destinations; lower values appear first.
Type ViewModelType { get; }- The view model type used both as the navigation target and the registry key.
Methods
PluginViewModelBase CreateViewModel()- Creates the view model instance shown when the destination is activated.
Control BuildView()- Builds the control that renders
ViewModelType.
- Builds the control that renders
ISettingsPageExtension
interface — LANCommander.Launcher.Plugins.Extensions.ISettingsPageExtension
Adds an additional section to the launcher's settings page. Implementations are resolved from DI and appended, ordered by Order, beneath the built-in settings sections.
Properties
string Title { get; }- Heading shown for the section.
int Order { get; }- Relative position among extension sections; lower values appear first.
Methods
Control BuildContent()- Builds the control rendered inside the section.
LANCommander.Launcher.Plugins
IViewRegistry
interface — LANCommander.Launcher.Plugins.IViewRegistry
Maps view model types to the Avalonia controls that render them. Seeded at startup with the launcher's built-in mappings and extended at runtime by plugins that add navigable views. Consumers apply AsDataTemplate to a ContentControl so content is resolved by view model type, replacing the previously hard-coded inline XAML data templates.
Methods
void Register(Type viewModelType, Func<Control> factory)- Register a control factory for the given view model type.
void Register<TViewModel>(Func<Control> factory)- Register a control factory for
TViewModel.
- Register a control factory for
IDataTemplate AsDataTemplate()- Build an
IDataTemplatebacked by the current registrations. Matching prefers the most-derived registered type, preserving the launcher's existing rule that DepotGameDetailViewModel resolves before its GameDetailViewModel base.
- Build an
PluginViewModelBase
class — LANCommander.Launcher.Plugins.PluginViewModelBase
Base type for view models supplied by plugins. Lives in this project (rather than the launcher's ViewModels assembly) so plugins can derive from it without taking a dependency on the launcher application itself, avoiding a circular reference.
ViewRegistry
class — LANCommander.Launcher.Plugins.ViewRegistry
Methods
void Register(Type viewModelType, Func<Control> factory)void Register<TViewModel>(Func<Control> factory)IDataTemplate AsDataTemplate()