parent
f9fe345553
commit
b232bacf27
14 changed files with 147 additions and 60 deletions
@ -0,0 +1,89 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2018 gRPC authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H |
||||
#define GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H |
||||
|
||||
#include <vector> |
||||
|
||||
#include <grpc/impl/codegen/log.h> |
||||
#include <grpcpp/impl/codegen/interceptor.h> |
||||
#include <grpcpp/impl/codegen/string_ref.h> |
||||
|
||||
namespace grpc { |
||||
|
||||
class ServerContext; |
||||
|
||||
namespace internal { |
||||
template <int I> |
||||
class CallNoOp; |
||||
} |
||||
|
||||
namespace experimental { |
||||
class ServerRpcInfo; |
||||
|
||||
class ServerInterceptorFactoryInterface { |
||||
public: |
||||
virtual ~ServerInterceptorFactoryInterface() {} |
||||
virtual Interceptor* CreateServerInterceptor(ServerRpcInfo* info) = 0; |
||||
}; |
||||
|
||||
class ServerRpcInfo { |
||||
public: |
||||
ServerRpcInfo() {} |
||||
ServerRpcInfo(grpc::ServerContext* ctx, const char* method, |
||||
const std::vector<std::unique_ptr< |
||||
experimental::ServerInterceptorFactoryInterface>>& creators) |
||||
: ctx_(ctx), method_(method) { |
||||
for (const auto& creator : creators) { |
||||
interceptors_.push_back(std::unique_ptr<experimental::Interceptor>( |
||||
creator->CreateServerInterceptor(this))); |
||||
} |
||||
} |
||||
~ServerRpcInfo(){}; |
||||
|
||||
ServerRpcInfo(const ServerRpcInfo&) = delete; |
||||
ServerRpcInfo(ServerRpcInfo&&) = default; |
||||
ServerRpcInfo& operator=(ServerRpcInfo&&) = default; |
||||
|
||||
// Getter methods
|
||||
const char* method() { return method_; } |
||||
grpc::ServerContext* server_context() { return ctx_; } |
||||
|
||||
public: |
||||
/* Runs interceptor at pos \a pos. If \a reverse is set, the interceptor order
|
||||
* is the reverse */ |
||||
void RunInterceptor( |
||||
experimental::InterceptorBatchMethods* interceptor_methods, |
||||
unsigned int pos) { |
||||
GPR_CODEGEN_ASSERT(pos < interceptors_.size()); |
||||
interceptors_[pos]->Intercept(interceptor_methods); |
||||
} |
||||
|
||||
private: |
||||
grpc::ServerContext* ctx_ = nullptr; |
||||
const char* method_ = nullptr; |
||||
|
||||
public: |
||||
std::vector<std::unique_ptr<experimental::Interceptor>> interceptors_; |
||||
}; |
||||
|
||||
} // namespace experimental
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCPP_IMPL_CODEGEN_SERVER_INTERCEPTOR_H
|
Loading…
Reference in new issue