Page MenuHomePhorge

D3246.1765351952.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D3246.1765351952.diff

diff --git a/services/backup/docker-server/contents/server/src/ReactorBase.h b/services/backup/docker-server/contents/server/src/ReactorBase.h
new file mode 100644
--- /dev/null
+++ b/services/backup/docker-server/contents/server/src/ReactorBase.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#include <grpcpp/grpcpp.h>
+#include <iostream>
+#include <string>
+
+namespace comm {
+namespace network {
+
+template <class Request, class Response>
+class ReactorBase : public grpc::ServerBidiReactor<Request, Response> {
+ Request request;
+ Response response;
+
+ void finish(grpc::Status status = grpc::Status::OK);
+
+public:
+ ReactorBase();
+
+ void OnDone() override;
+ void OnReadDone(bool ok) override;
+ void OnWriteDone(bool ok) override;
+
+ virtual grpc::Status handleRequest(Request request, Response *response) = 0;
+};
+
+template <class Request, class Response>
+void ReactorBase<Request, Response>::finish(grpc::Status status) {
+ this->Finish(status);
+}
+
+template <class Request, class Response>
+ReactorBase<Request, Response>::ReactorBase() {
+ this->StartRead(&this->request);
+}
+
+template <class Request, class Response>
+void ReactorBase<Request, Response>::OnDone() {
+ delete this;
+}
+
+template <class Request, class Response>
+void ReactorBase<Request, Response>::OnReadDone(bool ok) {
+ if (!ok) {
+ this->finish(grpc::Status(grpc::StatusCode::INTERNAL, "reading error"));
+ return;
+ }
+ try {
+ grpc::Status status = this->handleRequest(this->request, &this->response);
+ if (status.ok()) {
+ this->finish(status);
+ return;
+ }
+ this->StartWrite(&this->response);
+ } catch (std::runtime_error &e) {
+ this->finish(grpc::Status(grpc::StatusCode::INTERNAL, e.what()));
+ }
+}
+
+template <class Request, class Response>
+void ReactorBase<Request, Response>::OnWriteDone(bool ok) {
+ if (!ok) {
+ std::cout << "Server write failed" << std::endl;
+ return;
+ }
+ this->StartRead(&this->request);
+}
+
+} // namespace network
+} // namespace comm

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 10, 7:32 AM (17 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5862060
Default Alt Text
D3246.1765351952.diff (1 KB)

Event Timeline