-
- Status status_ = Status::INIT;
- grpc::ServerContext context_;
- grpc::ServerCompletionQueue* cq_;
- Collectd::AsyncService* service_;
- QueryValuesRequest request_;
- std::queue<value_list_t> value_lists_;
- QueryValuesResponse response_;
- grpc::ServerAsyncWriter<QueryValuesResponse> writer_;
-};
-
-/*
- * Dispatch service
- */
-// DispatchValuesCallData holds the state and implements the logic for DispatchValues calls.
-class DispatchValuesCallData : public CallData {
-public:
- DispatchValuesCallData(Dispatch::AsyncService* service, grpc::ServerCompletionQueue* cq)
- : cq_(cq), service_(service), reader_(&context_) {
- process(true);
- }
-
- void process(bool ok) final {
- if (status == Status::INIT) {
- service_->RequestDispatchValues(&context_, &reader_, cq_, cq_, this);
- status = Status::CALL;
- } else if (status == Status::CALL) {
- reader_.Read(&request_, this);
- status = Status::READ;
- } else if (status == Status::READ && ok) {
- (void) DispatchValue(&context_, request_, &response_);
-
- reader_.Read(&request_, this);
- } else if (status == Status::READ) {
- response_.Clear();
-
- status = Status::DONE;
- } else if (status == Status::DONE) {
- new DispatchValuesCallData(service_, cq_);
- delete this;
- } else {
- ERROR("grpc: DispatchValuesCallData: invalid state");
- }
- }
-
-private:
- enum class Status {
- INIT,
- CALL,
- READ,
- DONE,
- };
- Status status = Status::INIT;
-
- grpc::ServerContext context_;
- grpc::ServerCompletionQueue* cq_;
- Dispatch::AsyncService* service_;
-
- DispatchValuesRequest request_;
- DispatchValuesResponse response_;
- grpc::ServerAsyncReader<DispatchValuesResponse, DispatchValuesRequest> reader_;