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 { 28 29 class ServerBuilder; 30 class ServerInitializer; 31 32 /// This interface is meant for internal usage only. Implementations of this 33 /// interface should add themselves to a \a ServerBuilder instance through the 34 /// \a InternalAddPluginFactory method. 35 class ServerBuilderPlugin { 36 public: ~ServerBuilderPlugin()37 virtual ~ServerBuilderPlugin() {} 38 virtual std::string name() = 0; 39 40 /// UpdateServerBuilder will be called at an early stage in 41 /// ServerBuilder::BuildAndStart(), right after the ServerBuilderOptions have 42 /// done their updates. UpdateServerBuilder(ServerBuilder *)43 virtual void UpdateServerBuilder(ServerBuilder* /*builder*/) {} 44 45 /// InitServer will be called in ServerBuilder::BuildAndStart(), after the 46 /// Server instance is created. 47 virtual void InitServer(ServerInitializer* si) = 0; 48 49 /// Finish will be called at the end of ServerBuilder::BuildAndStart(). 50 virtual void Finish(ServerInitializer* si) = 0; 51 52 /// ChangeArguments is an interface that can be used in 53 /// ServerBuilderOption::UpdatePlugins 54 virtual void ChangeArguments(const std::string& name, void* value) = 0; 55 56 /// UpdateChannelArguments will be called in ServerBuilder::BuildAndStart(), 57 /// before the Server instance is created. UpdateChannelArguments(ChannelArguments *)58 virtual void UpdateChannelArguments(ChannelArguments* /*args*/) {} 59 has_sync_methods()60 virtual bool has_sync_methods() const { return false; } has_async_methods()61 virtual bool has_async_methods() const { return false; } 62 }; 63 64 } // namespace grpc 65 66 #endif // GRPCPP_IMPL_SERVER_BUILDER_PLUGIN_H 67