osb/source/game/StarPlayerStorage.hpp

58 lines
1.6 KiB
C++
Raw Normal View History

#pragma once
2023-06-20 04:33:09 +00:00
#include "StarOrderedMap.hpp"
#include "StarUuid.hpp"
#include "StarPlayerFactory.hpp"
#include "StarThread.hpp"
#include "StarWorldStorage.hpp"
#include "StarStatistics.hpp"
namespace Star {
class PlayerStorage {
public:
PlayerStorage(String const& storageDir);
~PlayerStorage();
size_t playerCount() const;
// Returns nothing if index is out of bounds.
Maybe<Uuid> playerUuidAt(size_t index);
2023-07-22 12:31:04 +00:00
// Returns nothing if name doesn't match a player.
Maybe<Uuid> playerUuidByName(String const& name, Maybe<Uuid> except = {});
2023-06-20 04:33:09 +00:00
2023-07-22 12:31:04 +00:00
// Also returns the diskStore Json if needed.
Json savePlayer(PlayerPtr const& player);
Maybe<Json> maybeGetPlayerData(Uuid const& uuid);
Json getPlayerData(Uuid const& uuid);
2023-06-20 04:33:09 +00:00
PlayerPtr loadPlayer(Uuid const& uuid);
void deletePlayer(Uuid const& uuid);
WorldChunks loadShipData(Uuid const& uuid);
void applyShipUpdates(Uuid const& uuid, WorldChunks const& updates);
// Move the given player to the top of the player ordering.
void moveToFront(Uuid const& uuid);
// Copy all the player relevant files for this uuid into .bak1 .bak2 etc
// files for however many backups are configured
void backupCycle(Uuid const& uuid);
// Get / Set PlayerStorage global metadata
void setMetadata(String key, Json value);
Json getMetadata(String const& key);
private:
String const& uuidFileName(Uuid const& uuid);
2023-06-20 04:33:09 +00:00
void writeMetadata();
mutable RecursiveMutex m_mutex;
String m_storageDirectory;
String m_backupDirectory;
2023-06-20 04:33:09 +00:00
OrderedHashMap<Uuid, Json> m_savedPlayersCache;
BiMap<Uuid, String> m_playerFileNames;
2023-06-20 04:33:09 +00:00
JsonObject m_metadata;
};
}