diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 386460a756..6a98fcbff7 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -31,10 +31,13 @@ AssetClient::AssetClient() { static_cast(dependency)->deleteLater(); }); - auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); + auto nodeList = DependencyManager::get(); + auto& packetReceiver = nodeList->getPacketReceiver(); packetReceiver.registerListener(PacketType::AssetGetInfoReply, this, "handleAssetGetInfoReply"); packetReceiver.registerMessageListener(PacketType::AssetGetReply, this, "handleAssetGetReply"); packetReceiver.registerListener(PacketType::AssetUploadReply, this, "handleAssetUploadReply"); + + connect(nodeList.data(), &LimitedNodeList::nodeKilled, this, &AssetClient::handleNodeKilled); } AssetRequest* AssetClient::createRequest(const QString& hash, const QString& extension) { @@ -281,3 +284,36 @@ void AssetClient::handleAssetUploadReply(QSharedPointer packet, Shared // it to avoid constantly creating/deleting the map on subsequent requests. } } + +void AssetClient::handleNodeKilled(SharedNodePointer node) { + { + auto messageMapIt = _pendingRequests.find(node); + if (messageMapIt != _pendingRequests.end()) { + for (const auto& value : messageMapIt->second) { + value.second(AssetServerError::NetworkError, QByteArray()); + } + messageMapIt->second.clear(); + } + } + + { + auto messageMapIt = _pendingInfoRequests.find(node); + if (messageMapIt != _pendingInfoRequests.end()) { + AssetInfo info { "", 0 }; + for (const auto& value : messageMapIt->second) { + value.second(AssetServerError::NetworkError, info); + } + messageMapIt->second.clear(); + } + } + + { + auto messageMapIt = _pendingUploads.find(node); + if (messageMapIt != _pendingUploads.end()) { + for (const auto& value : messageMapIt->second) { + value.second(AssetServerError::NetworkError, ""); + } + messageMapIt->second.clear(); + } + } +} diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index 34f1937dd8..0e8e4d63eb 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -20,6 +20,7 @@ #include "AssetUtils.h" #include "LimitedNodeList.h" #include "NLPacket.h" +#include "Node.h" class AssetRequest; class AssetUpload; @@ -46,6 +47,8 @@ private slots: void handleAssetGetReply(QSharedPointer packetList, SharedNodePointer senderNode); void handleAssetUploadReply(QSharedPointer packet, SharedNodePointer senderNode); + void handleNodeKilled(SharedNodePointer node); + private: bool getAssetInfo(const QString& hash, const QString& extension, GetInfoCallback callback); bool getAsset(const QString& hash, const QString& extension, DataOffset start, DataOffset end, ReceivedAssetCallback callback);