1 /* 2 * 3 * Copyright 2016 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 #ifndef GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H 20 #define GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H 21 22 #include <memory> 23 24 #include <grpcpp/support/channel_arguments.h> 25 #include <grpcpp/support/config.h> 26 27 namespace grpc_impl { 28 29 class ServerInitializer; 30 } // namespace grpc_impl 31 namespace grpc { 32 33 class ServerBuilder; 34 35 /// This interface is meant for internal usage only. Implementations of this 36 /// interface should add themselves to a \a ServerBuilder instance through the 37 /// \a InternalAddPluginFactory method. 38 class ServerBuilderPlugin { 39 public: ~ServerBuilderPlugin()40 virtual ~ServerBuilderPlugin() {} 41 virtual std::string name() = 0; 42 43 /// UpdateServerBuilder will be called at an early stage in 44 /// ServerBuilder::BuildAndStart(), right after the ServerBuilderOptions have 45 /// done their updates. UpdateServerBuilder(ServerBuilder *)46 virtual void UpdateServerBuilder(ServerBuilder* /*builder*/) {} 47 48 /// InitServer will be called in ServerBuilder::BuildAndStart(), after the 49 /// Server instance is created. 50 virtual void InitServer(grpc_impl::ServerInitializer* si) = 0; 51 52 /// Finish will be called at the end of ServerBuilder::BuildAndStart(). 53 virtual void Finish(grpc_impl::ServerInitializer* si) = 0; 54 55 /// ChangeArguments is an interface that can be used in 56 /// ServerBuilderOption::UpdatePlugins 57 virtual void ChangeArguments(const std::string& name, void* value) = 0; 58 59 /// UpdateChannelArguments will be called in ServerBuilder::BuildAndStart(), 60 /// before the Server instance is created. UpdateChannelArguments(ChannelArguments *)61 virtual void UpdateChannelArguments(ChannelArguments* /*args*/) {} 62 has_sync_methods()63 virtual bool has_sync_methods() const { return false; } has_async_methods()64 virtual bool has_async_methods() const { return false; } 65 }; 66 67 } // namespace grpc 68 69 #endif // GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H 70