WIP:
diff --git a/src/main/cpp/client/SessionImpl.cpp b/src/main/cpp/client/SessionImpl.cpp index da7e9d1..f047b76 100644 --- a/src/main/cpp/client/SessionImpl.cpp +++ b/src/main/cpp/client/SessionImpl.cpp
@@ -89,6 +89,95 @@ stub_->async()->AckMessage(client_context, request, response, callback); } +void SessionImpl::heartbeat(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::HeartbeatRequest* request, + std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) { + auto response = new rmq::HeartbeatResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->Heartbeat(client_context, request, response, callback); +} + +void SessionImpl::healthCheck(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::HealthCheckRequest* request, + std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) { + auto response = new rmq::HealthCheckResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->HealthCheck(client_context, request, response, callback); +} + +void SessionImpl::endTransaction(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::EndTransactionRequest* request, + std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) { + auto response = new rmq::EndTransactionResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->EndTransaction(client_context, request, response, callback); +} + +void SessionImpl::queryOffset(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::QueryOffsetRequest* request, + std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) { + auto response = new rmq::QueryOffsetResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->QueryOffset(client_context, request, response, callback); +} + +void SessionImpl::pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request, + std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) { + auto response = new rmq::PullMessageResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->PullMessage(client_context, request, response, callback); +} + +void SessionImpl::forwardMessageToDeadLetterQueue( + absl::flat_hash_map<std::string, std::string> metadata, const rmq::ForwardMessageToDeadLetterQueueRequest* request, + std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) { + auto response = new rmq::ForwardMessageToDeadLetterQueueResponse; + auto client_context = new grpc::ClientContext; + addMetadata(metadata, client_context); + setDeadline(io_timeout_, client_context); + auto callback = [=](grpc::Status status) { + auto reply = absl::WrapUnique(response); + auto ctx = absl::WrapUnique(client_context); + cb(status, *reply); + }; + stub_->async()->ForwardMessageToDeadLetterQueue(client_context, request, response, callback); +} + void SessionImpl::addMetadata(const absl::flat_hash_map<std::string, std::string>& metadata, grpc::ClientContext* client_context) { for (const auto& entry : metadata) {
diff --git a/src/main/cpp/client/include/Session.h b/src/main/cpp/client/include/Session.h index 4ad6de1..651f94d 100644 --- a/src/main/cpp/client/include/Session.h +++ b/src/main/cpp/client/include/Session.h
@@ -56,6 +56,29 @@ virtual void ack(absl::flat_hash_map<std::string, std::string> metadata, const rmq::AckMessageRequest* request, std::function<void(const grpc::Status&, const rmq::AckMessageResponse&)> cb) PURE; + + virtual void heartbeat(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HeartbeatRequest* request, + std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) PURE; + + virtual void healthCheck(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::HealthCheckRequest* request, + std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) PURE; + + virtual void endTransaction(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::EndTransactionRequest* request, + std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) PURE; + + virtual void queryOffset(absl::flat_hash_map<std::string, std::string> metadata, + const rmq::QueryOffsetRequest* request, + std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) PURE; + + virtual void pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request, + std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) PURE; + + virtual void forwardMessageToDeadLetterQueue( + absl::flat_hash_map<std::string, std::string> metadata, + const rmq::ForwardMessageToDeadLetterQueueRequest* request, + std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) PURE; }; ROCKETMQ_NAMESPACE_END \ No newline at end of file
diff --git a/src/main/cpp/client/include/SessionImpl.h b/src/main/cpp/client/include/SessionImpl.h index f07f801..9e84aff 100644 --- a/src/main/cpp/client/include/SessionImpl.h +++ b/src/main/cpp/client/include/SessionImpl.h
@@ -35,6 +35,26 @@ void ack(absl::flat_hash_map<std::string, std::string> metadata, const rmq::AckMessageRequest* request, std::function<void(const grpc::Status&, const rmq::AckMessageResponse&)> cb) override; + void heartbeat(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HeartbeatRequest* request, + std::function<void(const grpc::Status&, const rmq::HeartbeatResponse&)> cb) override; + + void healthCheck(absl::flat_hash_map<std::string, std::string> metadata, const rmq::HealthCheckRequest* request, + std::function<void(const grpc::Status&, const rmq::HealthCheckResponse&)> cb) override; + + void endTransaction(absl::flat_hash_map<std::string, std::string> metadata, const rmq::EndTransactionRequest* request, + std::function<void(const grpc::Status&, const rmq::EndTransactionResponse&)> cb) override; + + void queryOffset(absl::flat_hash_map<std::string, std::string> metadata, const rmq::QueryOffsetRequest* request, + std::function<void(const grpc::Status&, const rmq::QueryOffsetResponse&)> cb) override; + + void pull(absl::flat_hash_map<std::string, std::string> metadata, const rmq::PullMessageRequest* request, + std::function<void(const grpc::Status&, const rmq::PullMessageResponse&)> cb) override; + + void forwardMessageToDeadLetterQueue( + absl::flat_hash_map<std::string, std::string> metadata, + const rmq::ForwardMessageToDeadLetterQueueRequest* request, + std::function<void(const grpc::Status&, const rmq::ForwardMessageToDeadLetterQueueResponse&)> cb) override; + private: std::shared_ptr<grpc::Channel> channel_; std::unique_ptr<rmq::MessagingService::Stub> stub_;