12 #ifndef hifi_AssetServer_h
13 #define hifi_AssetServer_h
15 #include <QtCore/QDir>
16 #include <QtCore/QSharedPointer>
17 #include <QtCore/QThreadPool>
20 #include <ThreadedAssignment.h>
22 #include "AssetUtils.h"
23 #include "ReceivedMessage.h"
25 #include "RegisteredMetaTypes.h"
27 using BakeVersion = int;
28 static const BakeVersion INITIAL_BAKE_VERSION = 0;
29 static const BakeVersion NEEDS_BAKING_BAKE_VERSION = -1;
31 enum class BakedAssetType : int {
42 enum class ModelBakeVersion : BakeVersion {
43 Initial = INITIAL_BAKE_VERSION,
50 enum class TextureBakeVersion : BakeVersion {
51 Initial = INITIAL_BAKE_VERSION,
58 enum class ScriptBakeVersion : BakeVersion {
59 Initial = INITIAL_BAKE_VERSION,
66 BakeVersion bakeVersion { INITIAL_BAKE_VERSION };
67 bool failedLastBake {
false };
68 QString lastBakeErrors;
69 QString redirectTarget;
74 class AssetServer :
public ThreadedAssignment {
77 AssetServer(ReceivedMessage& message);
79 void aboutToFinish()
override;
87 void queueRequests(QSharedPointer<ReceivedMessage> packet, SharedNodePointer senderNode);
88 void handleAssetGetInfo(QSharedPointer<ReceivedMessage> packet, SharedNodePointer senderNode);
89 void handleAssetGet(QSharedPointer<ReceivedMessage> packet, SharedNodePointer senderNode);
90 void handleAssetUpload(QSharedPointer<ReceivedMessage> packetList, SharedNodePointer senderNode);
91 void handleAssetMappingOperation(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
93 void sendStatsPacket()
override;
96 void replayRequests();
98 void handleGetMappingOperation(ReceivedMessage& message, NLPacketList& replyPacket);
99 void handleGetAllMappingOperation(NLPacketList& replyPacket);
100 void handleSetMappingOperation(ReceivedMessage& message,
bool hasWriteAccess, NLPacketList& replyPacket);
101 void handleDeleteMappingsOperation(ReceivedMessage& message,
bool hasWriteAccess, NLPacketList& replyPacket);
102 void handleRenameMappingOperation(ReceivedMessage& message,
bool hasWriteAccess, NLPacketList& replyPacket);
103 void handleSetBakingEnabledOperation(ReceivedMessage& message,
bool hasWriteAccess, NLPacketList& replyPacket);
105 void handleAssetServerBackup(ReceivedMessage& message, NLPacketList& replyPacket);
106 void handleAssetServerRestore(ReceivedMessage& message, NLPacketList& replyPacket);
109 bool loadMappingsFromFile();
110 bool writeMappingsToFile();
113 bool setMapping(AssetUtils::AssetPath path, AssetUtils::AssetHash hash);
116 bool deleteMappings(
const AssetUtils::AssetPathList& paths);
119 bool renameMapping(AssetUtils::AssetPath oldPath, AssetUtils::AssetPath newPath);
121 bool setBakingEnabled(
const AssetUtils::AssetPathList& paths,
bool enabled);
124 void cleanupUnmappedFiles();
127 void cleanupBakedFilesForDeletedAssets();
129 QString getPathToAssetHash(
const AssetUtils::AssetHash& assetHash);
131 std::pair<AssetUtils::BakingStatus, QString> getAssetStatus(
const AssetUtils::AssetPath& path,
const AssetUtils::AssetHash& hash);
134 void maybeBake(
const AssetUtils::AssetPath& path,
const AssetUtils::AssetHash& hash);
135 void createEmptyMetaFile(
const AssetUtils::AssetHash& hash);
136 bool hasMetaFile(
const AssetUtils::AssetHash& hash);
137 bool needsToBeBaked(
const AssetUtils::AssetPath& path,
const AssetUtils::AssetHash& assetHash);
138 void bakeAsset(
const AssetUtils::AssetHash& assetHash,
const AssetUtils::AssetPath& assetPath,
const QString& filePath);
141 void handleCompletedBake(QString originalAssetHash, QString assetPath, QString bakedTempOutputDir);
142 void handleFailedBake(QString originalAssetHash, QString assetPath, QString errors);
143 void handleAbortedBake(QString originalAssetHash, QString assetPath);
146 std::pair<bool, AssetMeta> readMetaFile(AssetUtils::AssetHash hash);
147 bool writeMetaFile(AssetUtils::AssetHash originalAssetHash,
const AssetMeta& meta = AssetMeta());
150 void removeBakedPathsForDeletedAsset(AssetUtils::AssetHash originalAssetHash);
152 AssetUtils::Mappings _fileMappings;
154 QDir _resourcesDirectory;
155 QDir _filesDirectory;
158 QThreadPool _transferTaskPool;
160 QHash<AssetUtils::AssetHash, std::shared_ptr<BakeAssetTask>> _pendingBakes;
161 QThreadPool _bakingTaskPool;
163 QMutex _queuedRequestsMutex;
164 bool _isQueueingRequests {
true };
165 using RequestQueue = QVector<QPair<QSharedPointer<ReceivedMessage>, SharedNodePointer>>;
166 RequestQueue _queuedRequests;
168 uint64_t _filesizeLimit;
A generic 3D model displaying geometry loaded from a URL.
Definition: Model.h:84
A simple object wrapper for an OpenGL texture.
Definition: material-networking/src/material-networking/TextureCache.h:39