mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-21 04:02:48 +00:00
feat(cdclient): make a new CDServer.sqlite off-thread and swap tables in place
CDClientSnapshot converts a copy of the client's fdb into its own CDServer-<hash>.sqlite with the cdserver migrations applied, on its own connection. CDClientDatabase::Reconnect opens the new file before letting go of the old one; CDClientManager::Reload empties every table (old entries kept alive so references from spawned objects stay valid), retires the old fdb view and loads again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,20 @@ namespace CDClientManager {
|
||||
void LoadValuesFromDatabase(const std::filesystem::path& fdbPath = {});
|
||||
void LoadValuesFromDefaults();
|
||||
|
||||
/**
|
||||
* Loads every table again after a CDClient reload (the caller has already reconnected CDClientDatabase to the new
|
||||
* CDServer.sqlite). Each table's old entries are emptied out but kept alive, and so is the old fdb's view, so a
|
||||
* reference an entity took from a table before the reload stays valid: what is spawned keeps what it loaded, and
|
||||
* what is made afterwards reads the new data. Main thread only.
|
||||
*/
|
||||
void Reload(const std::filesystem::path& fdbPath);
|
||||
|
||||
// The first half of Reload: lets go of the fdb and empties every table, keeping the old entries alive
|
||||
void ResetTables();
|
||||
|
||||
// How many tables ResetTables empties
|
||||
uint32_t GetTableCount();
|
||||
|
||||
/**
|
||||
* Fetch a table from CDClient
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user