На стороне сервера теперь используется AssetsPreloader.hpp

This commit is contained in:
2026-01-03 13:11:20 +06:00
parent 776e9bfaca
commit d9e40b4e80
6 changed files with 793 additions and 154 deletions

View File

@@ -4,7 +4,7 @@
namespace LV::Server {
ContentManager::ContentManager(AssetsManager &am)
ContentManager::ContentManager(AssetsPreloader &am)
: AM(am)
{
std::fill(std::begin(NextId), std::end(NextId), 1);

View File

@@ -2,7 +2,7 @@
#include "Common/Abstract.hpp"
#include "Server/Abstract.hpp"
#include "Server/AssetsManager.hpp"
#include "Common/AssetsPreloader.hpp"
#include <sol/table.hpp>
#include <unordered_map>
#include <unordered_set>
@@ -135,7 +135,7 @@ class ContentManager {
void registerBase_Entity(ResourceId id, const std::string& domain, const std::string& key, const sol::table& profile);
public:
ContentManager(AssetsManager &am);
ContentManager(AssetsPreloader &am);
~ContentManager();
// Регистрирует определение контента
@@ -215,7 +215,7 @@ public:
private:
TOS::Logger LOG = "Server>ContentManager";
AssetsManager& AM;
AssetsPreloader& AM;
};
}

View File

@@ -3,7 +3,6 @@
#include "Common/Net.hpp"
#include "Common/Packets.hpp"
#include "Server/Abstract.hpp"
#include "Server/AssetsManager.hpp"
#include "Server/ContentManager.hpp"
#include "Server/RemoteClient.hpp"
#include <algorithm>
@@ -1568,7 +1567,7 @@ void GameServer::init(fs::path worldPath) {
AssetsInit.Assets.push_back(mlt.LoadChain[index].Path / "assets");
}
Content.AM.applyResourceChange(Content.AM.recheckResources(AssetsInit));
Content.AM.applyResourceChange(Content.AM.recheckResourcesSync(AssetsInit));
LOG.info() << "Пре Инициализация";
@@ -1883,8 +1882,8 @@ void GameServer::stepModInitializations() {
void GameServer::reloadMods() {
LOG.info() << "Перезагрузка модов: ассеты и зависимости";
AssetsManager::ResourceChangeObj changes = Content.AM.recheckResources(AssetsInit);
AssetsManager::Out_applyResourceChange applied = Content.AM.applyResourceChange(changes);
AssetsPreloader::ResourceChangeObj changes = Content.AM.recheckResourcesSync(AssetsInit);
AssetsPreloader::Out_applyResourceChange applied = Content.AM.applyResourceChange(changes);
size_t changedCount = 0;
size_t lostCount = 0;
@@ -2691,22 +2690,23 @@ void GameServer::stepSyncContent() {
std::vector<std::tuple<EnumAssets, ResourceId, const std::string, const std::string, Resource>> resources;
for(int type = 0; type < (int) EnumAssets::MAX_ENUM; type++) {
for(ResourceId resId : full.AssetsInfo[type]) {
std::optional<std::tuple<Resource, const std::string&, const std::string&>> result = Content.AM.getResource((EnumAssets) type, resId);
if(!result)
const AssetsPreloader::MediaResource* media = Content.AM.getResource((EnumAssets) type, resId);
if(!media)
continue;
auto& [resource, domain, key] = *result;
resources.emplace_back((EnumAssets) type, resId, domain, key, resource);
Resource resource(media->Resource->data(), media->Resource->size());
resources.emplace_back((EnumAssets) type, resId, media->Domain, media->Key, std::move(resource));
}
}
for(const Hash_t& hash : full.Hashes) {
std::optional<std::tuple<Resource, const std::string&, const std::string&, EnumAssets, ResourceId>> result = Content.AM.getResource(hash);
std::optional<std::tuple<EnumAssets, uint32_t, const AssetsPreloader::MediaResource*>> result = Content.AM.getResource(hash);
if(!result)
continue;
auto& [resource, domain, key, type, id] = *result;
resources.emplace_back(type, id, domain, key, resource);
auto& [type, id, media] = *result;
Resource resource(media->Resource->data(), media->Resource->size());
resources.emplace_back(type, id, media->Domain, media->Key, std::move(resource));
}
// Информируем о запрошенных профилях

View File

@@ -1,6 +1,6 @@
#pragma once
#include "Server/AssetsManager.hpp"
#include "Common/AssetsPreloader.hpp"
#define SOL_EXCEPTIONS_SAFE_PROPAGATION 1
#include <Common/Net.hpp>
@@ -24,7 +24,6 @@
#include <unordered_map>
#include "WorldDefManager.hpp"
#include "AssetsManager.hpp"
#include "ContentManager.hpp"
#include "World.hpp"
@@ -74,7 +73,7 @@ class GameServer : public AsyncObject {
struct ContentObj {
public:
AssetsManager AM;
AssetsPreloader AM;
ContentManager CM;
// Если контент был перерегистрирован (исключая двоичные ресурсы), то профили будут повторно разосланы
@@ -266,7 +265,7 @@ class GameServer : public AsyncObject {
std::vector<std::pair<std::string, sol::table>> ModInstances;
// Идентификатор текущегго мода, находящевося в обработке
std::string CurrentModId;
AssetsManager::AssetsRegister AssetsInit;
AssetsPreloader::AssetsRegister AssetsInit;
DefEntityId PlayerEntityDefId = 0;
public:

View File

@@ -5,7 +5,6 @@
#include <Common/Net.hpp>
#include "Abstract.hpp"
#include "Common/Packets.hpp"
#include "Server/AssetsManager.hpp"
#include "Server/ContentManager.hpp"
#include <Common/Abstract.hpp>
#include <bitset>