namespace NeonSprawl.Server.Game.PositionState; /// Registers position authority: PostgreSQL when ConnectionStrings:NeonSprawl is set, otherwise in-memory (NS-15 / NS-17). public static class PositionStateServiceCollectionExtensions { private const string NeonSprawlConnectionStringName = "NeonSprawl"; public static IServiceCollection AddPositionStateStore(this IServiceCollection services, IConfiguration configuration) { services.Configure(configuration.GetSection(GamePositionOptions.SectionName)); var cs = configuration.GetConnectionString(NeonSprawlConnectionStringName); if (!string.IsNullOrWhiteSpace(cs)) { var trimmed = cs.Trim(); services.AddSingleton(_ => Npgsql.NpgsqlDataSource.Create(trimmed)); services.AddHostedService(); services.AddSingleton(); } else { services.AddSingleton(); } return services; } }