using System.Threading.Tasks; using Content.Shared.CCVar; using Robust.Shared.Configuration; namespace Content.Server.Database; /// /// Stupid tiny manager whose sole purpose is keeping track of the database entry for this server. /// /// /// This allows the value to be cached, /// so it can be easily retrieved by later code that needs to log the server ID to the database. /// public sealed class ServerDbEntryManager { [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IServerDbManager _db = default!; [Dependency] private readonly ILogManager _logManager = default!; private Task? _serverEntityTask; /// /// The entity that represents this server in the database. /// /// /// This value is cached when first requested. Do not re-use this entity; if you need data like the rounds, /// request it manually with . /// public Task ServerEntity => _serverEntityTask ??= GetServerEntity(); private async Task GetServerEntity() { var name = _cfg.GetCVar(CCVars.AdminLogsServerName); var server = await _db.AddOrGetServer(name); _logManager.GetSawmill("db").Verbose("Server name: {Name}, ID in database: {Id}", server, server.Id); return server; } }