Add a hook for the default constructor of ClientContext.

pull/4441/head
Bogdan Drutu 9 years ago
parent 3a977a49f6
commit 38d2ad6e96
  1. 10
      include/grpc++/client_context.h
  2. 19
      src/cpp/client/client_context.cc

@ -280,6 +280,16 @@ class ClientContext {
/// There is no guarantee the call will be cancelled.
void TryCancel();
/// Global Callbacks
///
/// Can be set exactly once per application to install hooks whenever
/// a client context is constructed.
class GlobalCallbacks {
public:
virtual void DefaultConstructor(ClientContext* context) = 0;
};
static void SetGlobalCallbacks(GlobalCallbacks* callbacks);
private:
// Disallow copy and assign.
ClientContext(const ClientContext&);

@ -45,12 +45,22 @@
namespace grpc {
class DefaultGlobalCallbacks GRPC_FINAL : public ClientContext::GlobalCallbacks {
public:
void DefaultConstructor(ClientContext* context) GRPC_OVERRIDE {}
};
static DefaultGlobalCallbacks g_default_callbacks;
static ClientContext::GlobalCallbacks* g_callbacks = &g_default_callbacks;
ClientContext::ClientContext()
: initial_metadata_received_(false),
call_(nullptr),
call_canceled_(false),
deadline_(gpr_inf_future(GPR_CLOCK_REALTIME)),
propagate_from_call_(nullptr) {}
propagate_from_call_(nullptr) {
g_callbacks->DefaultConstructor(this);
}
ClientContext::~ClientContext() {
if (call_) {
@ -124,4 +134,11 @@ grpc::string ClientContext::peer() const {
return peer;
}
void ClientContext::SetGlobalCallbacks(GlobalCallbacks* callbacks) {
GPR_ASSERT(g_callbacks == &g_default_callbacks);
GPR_ASSERT(callbacks != NULL);
GPR_ASSERT(callbacks != &g_default_callbacks);
g_callbacks = callbacks;
}
} // namespace grpc

Loading…
Cancel
Save