diff --git a/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientReadReactorBase.h b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientReadReactorBase.h --- a/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientReadReactorBase.h +++ b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientReadReactorBase.h @@ -22,8 +22,7 @@ void OnDone(const grpc::Status &status) override; bool isDone(); - virtual std::unique_ptr - readResponse(const Response &response) = 0; + virtual std::unique_ptr readResponse(Response &response) = 0; virtual void doneCallback(){}; virtual void terminateCallback(){}; }; diff --git a/services/backup/docker-server/contents/server/src/Reactors/client/blob/BlobGetClientReactor.h b/services/backup/docker-server/contents/server/src/Reactors/client/blob/BlobGetClientReactor.h new file mode 100644 --- /dev/null +++ b/services/backup/docker-server/contents/server/src/Reactors/client/blob/BlobGetClientReactor.h @@ -0,0 +1,57 @@ +#pragma once + +#include "ClientReadReactorBase.h" +#include "Constants.h" + +#include "../_generated/blob.grpc.pb.h" +#include "../_generated/blob.pb.h" + +#include +#include + +#include +#include +#include +#include + +namespace comm { +namespace network { +namespace reactor { + +class BlobGetClientReactor + : public ClientReadReactorBase { + std::string holder; + std::shared_ptr> dataChunks; + +public: + BlobGetClientReactor( + const std::string &holder, + std::shared_ptr> dataChunks); + + std::unique_ptr + readResponse(blob::GetResponse &response) override; + void doneCallback() override; +}; + +BlobGetClientReactor::BlobGetClientReactor( + const std::string &holder, + std::shared_ptr> dataChunks) + : holder(holder), dataChunks(dataChunks) { +} + +std::unique_ptr +BlobGetClientReactor::readResponse(blob::GetResponse &response) { + if (!this->dataChunks->write(std::move(*response.mutable_datachunk()))) { + throw std::runtime_error( + "error reading compaction data from the blob service"); + } + return nullptr; +} + +void BlobGetClientReactor::doneCallback() { + this->dataChunks->write(""); +} + +} // namespace reactor +} // namespace network +} // namespace comm