Run database migrations in parallel with the rest of game startup to improve load times.
This commit is contained in:
@@ -68,6 +68,8 @@ namespace Content.Server
|
|||||||
|
|
||||||
var logManager = IoCManager.Resolve<ILogManager>();
|
var logManager = IoCManager.Resolve<ILogManager>();
|
||||||
logManager.GetSawmill("Storage").Level = LogLevel.Info;
|
logManager.GetSawmill("Storage").Level = LogLevel.Info;
|
||||||
|
|
||||||
|
IoCManager.Resolve<IServerPreferencesManager>().StartInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PostInit()
|
public override void PostInit()
|
||||||
@@ -76,7 +78,7 @@ namespace Content.Server
|
|||||||
|
|
||||||
_gameTicker.Initialize();
|
_gameTicker.Initialize();
|
||||||
IoCManager.Resolve<ISandboxManager>().Initialize();
|
IoCManager.Resolve<ISandboxManager>().Initialize();
|
||||||
IoCManager.Resolve<IServerPreferencesManager>().Initialize();
|
IoCManager.Resolve<IServerPreferencesManager>().FinishInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
|
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ namespace Content.Server.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IServerPreferencesManager
|
public interface IServerPreferencesManager
|
||||||
{
|
{
|
||||||
void Initialize();
|
void FinishInit();
|
||||||
void OnClientConnected(IPlayerSession session);
|
void OnClientConnected(IPlayerSession session);
|
||||||
PlayerPreferences GetPreferences(string username);
|
PlayerPreferences GetPreferences(string username);
|
||||||
|
void StartInit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Content.Server.Database;
|
using Content.Server.Database;
|
||||||
using Content.Server.Interfaces;
|
using Content.Server.Interfaces;
|
||||||
using Content.Shared.Preferences;
|
using Content.Shared.Preferences;
|
||||||
@@ -23,8 +24,9 @@ namespace Content.Server.Preferences
|
|||||||
[Dependency] private readonly IResourceManager _resourceManager;
|
[Dependency] private readonly IResourceManager _resourceManager;
|
||||||
#pragma warning restore 649
|
#pragma warning restore 649
|
||||||
private PreferencesDatabase _preferencesDb;
|
private PreferencesDatabase _preferencesDb;
|
||||||
|
private Task<PreferencesDatabase> _prefsDbLoadTask;
|
||||||
|
|
||||||
public void Initialize()
|
public void StartInit()
|
||||||
{
|
{
|
||||||
_netManager.RegisterNetMessage<MsgPreferencesAndSettings>(nameof(MsgPreferencesAndSettings));
|
_netManager.RegisterNetMessage<MsgPreferencesAndSettings>(nameof(MsgPreferencesAndSettings));
|
||||||
_netManager.RegisterNetMessage<MsgSelectCharacter>(nameof(MsgSelectCharacter),
|
_netManager.RegisterNetMessage<MsgSelectCharacter>(nameof(MsgSelectCharacter),
|
||||||
@@ -68,7 +70,16 @@ namespace Content.Server.Preferences
|
|||||||
|
|
||||||
var maxCharacterSlots = _configuration.GetCVar<int>("game.maxcharacterslots");
|
var maxCharacterSlots = _configuration.GetCVar<int>("game.maxcharacterslots");
|
||||||
|
|
||||||
_preferencesDb = new PreferencesDatabase(dbConfig, maxCharacterSlots);
|
// Actually loading the preferences database takes a while,
|
||||||
|
// because EFCore has to initialize and run migrations.
|
||||||
|
// We load it in the thread pool here and then fetch the .Result in FinishInit.
|
||||||
|
// This means it'll run in parallel with other loading like prototypes & map load.
|
||||||
|
_prefsDbLoadTask = Task.Run(() => new PreferencesDatabase(dbConfig, maxCharacterSlots));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FinishInit()
|
||||||
|
{
|
||||||
|
_preferencesDb = _prefsDbLoadTask.Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleSelectCharacterMessage(MsgSelectCharacter message)
|
private void HandleSelectCharacterMessage(MsgSelectCharacter message)
|
||||||
|
|||||||
Reference in New Issue
Block a user