diff options
author | Craig Tiller <craig.tiller@gmail.com> | 2015-11-24 06:59:33 -0800 |
---|---|---|
committer | Craig Tiller <craig.tiller@gmail.com> | 2015-11-24 06:59:33 -0800 |
commit | 7221d999bb503acd733e75e374cbf7f6ac28e482 (patch) | |
tree | d97f19942011217c115d8443fa93a6daa36ec896 /src | |
parent | 447c795bb8d82ec328573c6517d82dc6d0dcc0f8 (diff) |
Global hook for doing something in response to a synchronous server call
Diffstat (limited to 'src')
-rw-r--r-- | src/cpp/server/server.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 695e811654..7b51c56f0d 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -51,6 +51,15 @@ namespace grpc { +class DefaultGlobalCallbacks GRPC_FINAL : public Server::GlobalCallbacks { + public: + void PreSynchronousRequest(ServerContext* context) GRPC_OVERRIDE {} + void PostSynchronousRequest(ServerContext* context) GRPC_OVERRIDE {} +}; + +static DefaultGlobalCallbacks g_default_callbacks; +static Server::GlobalCallbacks* g_callbacks = &g_default_callbacks; + class Server::UnimplementedAsyncRequestContext { protected: UnimplementedAsyncRequestContext() : generic_stream_(&server_context_) {} @@ -220,8 +229,10 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { void Run() { ctx_.BeginCompletionOp(&call_); + g_callbacks->PreSynchronousRequest(&ctx_); method_->handler()->RunHandler(MethodHandler::HandlerParameter( &call_, &ctx_, request_payload_, call_.max_message_size())); + g_callbacks->PostSynchronousRequest(&ctx_); request_payload_ = nullptr; void* ignored_tag; bool ignored_ok; @@ -304,6 +315,13 @@ Server::~Server() { delete sync_methods_; } +void Server::SetGlobalCallbacks(GlobalCallbacks* callbacks) { + GPR_ASSERT(g_callbacks == &g_default_callbacks); + GPR_ASSERT(callbacks != NULL); + GPR_ASSERT(callbacks != &g_default_callbacks); + g_callbacks = callbacks; +} + bool Server::RegisterService(const grpc::string* host, RpcService* service) { for (int i = 0; i < service->GetMethodCount(); ++i) { RpcServiceMethod* method = service->GetMethod(i); |