ServerDbEntryManager.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Threading.Tasks;
  2. using Content.Shared.CCVar;
  3. using Robust.Shared.Configuration;
  4. namespace Content.Server.Database;
  5. /// <summary>
  6. /// Stupid tiny manager whose sole purpose is keeping track of the <see cref="Server"/> database entry for this server.
  7. /// </summary>
  8. /// <remarks>
  9. /// This allows the value to be cached,
  10. /// so it can be easily retrieved by later code that needs to log the server ID to the database.
  11. /// </remarks>
  12. public sealed class ServerDbEntryManager
  13. {
  14. [Dependency] private readonly IConfigurationManager _cfg = default!;
  15. [Dependency] private readonly IServerDbManager _db = default!;
  16. [Dependency] private readonly ILogManager _logManager = default!;
  17. private Task<Server>? _serverEntityTask;
  18. /// <summary>
  19. /// The entity that represents this server in the database.
  20. /// </summary>
  21. /// <remarks>
  22. /// This value is cached when first requested. Do not re-use this entity; if you need data like the rounds,
  23. /// request it manually with <see cref="IServerDbManager.AddOrGetServer"/>.
  24. /// </remarks>
  25. public Task<Server> ServerEntity => _serverEntityTask ??= GetServerEntity();
  26. private async Task<Server> GetServerEntity()
  27. {
  28. var name = _cfg.GetCVar(CCVars.AdminLogsServerName);
  29. var server = await _db.AddOrGetServer(name);
  30. _logManager.GetSawmill("db").Verbose("Server name: {Name}, ID in database: {Id}", server, server.Id);
  31. return server;
  32. }
  33. }