Page MenuHomePhorge

D3465.1769024167.diff
No OneTemporary

Size
7 KB
Referenced Files
None
Subscribers
None

D3465.1769024167.diff

diff --git a/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientBidiReactorBase.h b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientBidiReactorBase.h
new file mode 100644
--- /dev/null
+++ b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientBidiReactorBase.h
@@ -0,0 +1,98 @@
+#include <grpcpp/grpcpp.h>
+
+namespace comm {
+namespace network {
+namespace reactor {
+
+template <class Request, class Response>
+class ClientBidiReactorBase
+ : public grpc::ClientBidiReactor<Request, Response> {
+ std::shared_ptr<Response> response = nullptr;
+ bool done = false;
+ bool initialized = 0;
+
+protected:
+ Request request;
+ grpc::Status status;
+
+public:
+ grpc::ClientContext context;
+
+ void nextWrite();
+ void terminate(const grpc::Status &status);
+ bool isDone();
+ void OnWriteDone(bool ok) override;
+ void OnReadDone(bool ok) override;
+ void OnDone(const grpc::Status &status) override;
+
+ virtual std::unique_ptr<grpc::Status> prepareRequest(
+ Request &request,
+ std::shared_ptr<Response> previousResponse) = 0;
+ virtual void doneCallback() {
+ }
+};
+
+template <class Request, class Response>
+void ClientBidiReactorBase<Request, Response>::nextWrite() {
+ this->request = Request();
+ std::unique_ptr<grpc::Status> status =
+ this->prepareRequest(this->request, this->response);
+ if (status != nullptr) {
+ this->terminate(*status);
+ return;
+ }
+ this->StartWrite(&this->request);
+ if (!this->initialized) {
+ this->StartCall();
+ this->initialized = true;
+ }
+}
+
+template <class Request, class Response>
+void ClientBidiReactorBase<Request, Response>::terminate(
+ const grpc::Status &status) {
+ if (this->done) {
+ return;
+ }
+ this->StartWritesDone();
+ this->status = status;
+ std::cout << "DONE [code=" << status.error_code()
+ << "][err=" << status.error_message() << "]" << std::endl;
+ this->done = true;
+ this->doneCallback();
+}
+
+template <class Request, class Response>
+bool ClientBidiReactorBase<Request, Response>::isDone() {
+ return this->done;
+}
+
+template <class Request, class Response>
+void ClientBidiReactorBase<Request, Response>::OnWriteDone(bool ok) {
+ if (this->response == nullptr) {
+ this->response = std::make_shared<Response>();
+ }
+ this->StartRead(&(*this->response));
+}
+
+template <class Request, class Response>
+void ClientBidiReactorBase<Request, Response>::OnReadDone(bool ok) {
+ if (!ok) {
+ if (this->done) {
+ return;
+ }
+ this->terminate(grpc::Status(grpc::StatusCode::UNKNOWN, "read error"));
+ return;
+ }
+ this->nextWrite();
+}
+
+template <class Request, class Response>
+void ClientBidiReactorBase<Request, Response>::OnDone(
+ const grpc::Status &status) {
+ this->terminate(status);
+}
+
+} // namespace reactor
+} // namespace network
+} // namespace comm
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
new file mode 100644
--- /dev/null
+++ b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientReadReactorBase.h
@@ -0,0 +1,78 @@
+#include <grpcpp/grpcpp.h>
+
+#include <functional>
+
+namespace comm {
+namespace network {
+namespace reactor {
+
+template <class Request, class Response>
+class ClientReadReactorBase : public grpc::ClientReadReactor<Response> {
+ Response response;
+ grpc::Status status;
+ bool done = false;
+
+ void terminate(const grpc::Status &status);
+
+public:
+ Request request;
+ grpc::ClientContext context;
+
+ void start();
+ void OnReadDone(bool ok) override;
+ void OnDone(const grpc::Status &status) override;
+ bool isDone();
+
+ virtual std::unique_ptr<grpc::Status>
+ readResponse(const Response &response) = 0;
+ virtual void doneCallback() {
+ }
+};
+
+template <class Request, class Response>
+void ClientReadReactorBase<Request, Response>::terminate(
+ const grpc::Status &status) {
+ if (this->done) {
+ return;
+ }
+ this->status = status;
+ std::cout << "DONE [code=" << status.error_code()
+ << "][err=" << status.error_message() << "]" << std::endl;
+ this->done = true;
+ this->doneCallback();
+}
+
+template <class Request, class Response>
+void ClientReadReactorBase<Request, Response>::start() {
+ this->StartRead(&this->response);
+ this->StartCall();
+}
+
+template <class Request, class Response>
+void ClientReadReactorBase<Request, Response>::OnReadDone(bool ok) {
+ if (!ok) {
+ this->terminate(grpc::Status(grpc::StatusCode::UNKNOWN, "read error"));
+ return;
+ }
+ std::unique_ptr<grpc::Status> status = this->readResponse(this->response);
+ if (status != nullptr) {
+ this->terminate(*status);
+ return;
+ }
+ this->StartRead(&this->response);
+}
+
+template <class Request, class Response>
+void ClientReadReactorBase<Request, Response>::OnDone(
+ const grpc::Status &status) {
+ this->terminate(status);
+}
+
+template <class Request, class Response>
+bool ClientReadReactorBase<Request, Response>::isDone() {
+ return this->done;
+}
+
+} // namespace reactor
+} // namespace network
+} // namespace comm
diff --git a/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientWriteReactorBase.h b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientWriteReactorBase.h
new file mode 100644
--- /dev/null
+++ b/services/backup/docker-server/contents/server/src/Reactors/client/base-reactors/ClientWriteReactorBase.h
@@ -0,0 +1,80 @@
+#include <grpcpp/grpcpp.h>
+
+namespace comm {
+namespace network {
+namespace reactor {
+
+template <class Request, class Response>
+class ClientWriteReactorBase : public grpc::ClientWriteReactor<Request> {
+ grpc::Status status;
+ bool done = false;
+ bool initialized = 0;
+ Request request;
+
+public:
+ Response response;
+ grpc::ClientContext context;
+
+ void nextWrite();
+ void OnWriteDone(bool ok) override;
+ void terminate(const grpc::Status &status);
+ bool isDone();
+ void OnDone(const grpc::Status &status) override;
+
+ virtual std::unique_ptr<grpc::Status> prepareRequest(Request &request) = 0;
+ virtual void doneCallback() {
+ }
+};
+
+template <class Request, class Response>
+void ClientWriteReactorBase<Request, Response>::nextWrite() {
+ this->request = Request();
+ std::unique_ptr<grpc::Status> status = this->prepareRequest(this->request);
+ if (status != nullptr) {
+ this->terminate(*status);
+ return;
+ }
+ this->StartWrite(&this->request);
+ if (!this->initialized) {
+ this->StartCall();
+ this->initialized = true;
+ }
+}
+
+template <class Request, class Response>
+void ClientWriteReactorBase<Request, Response>::OnWriteDone(bool ok) {
+ if (!ok) {
+ this->terminate(grpc::Status(grpc::StatusCode::UNKNOWN, "write error"));
+ return;
+ }
+ this->nextWrite();
+}
+
+template <class Request, class Response>
+void ClientWriteReactorBase<Request, Response>::terminate(
+ const grpc::Status &status) {
+ if (this->done) {
+ return;
+ }
+ this->status = status;
+ std::cout << "DONE [code=" << status.error_code()
+ << "][err=" << status.error_message() << "]" << std::endl;
+ this->done = true;
+ this->StartWritesDone();
+ this->doneCallback();
+}
+
+template <class Request, class Response>
+bool ClientWriteReactorBase<Request, Response>::isDone() {
+ return this->done;
+}
+
+template <class Request, class Response>
+void ClientWriteReactorBase<Request, Response>::OnDone(
+ const grpc::Status &status) {
+ this->terminate(status);
+}
+
+} // namespace reactor
+} // namespace network
+} // namespace comm

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 21, 7:36 PM (8 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5971093
Default Alt Text
D3465.1769024167.diff (7 KB)

Event Timeline