GRPC C++  1.8.0
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
server.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 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 GRPCXX_SERVER_H
20 #define GRPCXX_SERVER_H
21 
22 #include <condition_variable>
23 #include <list>
24 #include <memory>
25 #include <mutex>
26 #include <vector>
27 
29 #include <grpc++/impl/call.h>
35 #include <grpc++/support/config.h>
36 #include <grpc++/support/status.h>
37 #include <grpc/compression.h>
38 
39 struct grpc_server;
40 
41 namespace grpc {
42 
43 class AsyncGenericService;
44 class HealthCheckServiceInterface;
45 class ServerContext;
46 class ServerInitializer;
47 
52 class Server final : public ServerInterface, private GrpcLibraryCodegen {
53  public:
54  ~Server();
55 
60  void Wait() override;
61 
69  public:
70  virtual ~GlobalCallbacks() {}
72  virtual void UpdateArguments(ChannelArguments* args) {}
74  virtual void PreSynchronousRequest(ServerContext* context) = 0;
76  virtual void PostSynchronousRequest(ServerContext* context) = 0;
78  virtual void PreServerStart(Server* server) {}
80  virtual void AddPort(Server* server, const grpc::string& addr,
81  ServerCredentials* creds, int port) {}
82  };
88  static void SetGlobalCallbacks(GlobalCallbacks* callbacks);
89 
90  // Returns a \em raw pointer to the underlying \a grpc_server instance.
92 
95  return health_check_service_.get();
96  }
97 
99  std::shared_ptr<Channel> InProcessChannel(const ChannelArguments& args);
100 
101  private:
102  friend class AsyncGenericService;
103  friend class ServerBuilder;
104  friend class ServerInitializer;
105 
106  class SyncRequest;
107  class AsyncRequest;
108  class ShutdownRequest;
109 
114  class SyncRequestThreadManager;
115 
116  class UnimplementedAsyncRequestContext;
117  class UnimplementedAsyncRequest;
118  class UnimplementedAsyncResponse;
119 
141  Server(int max_message_size, ChannelArguments* args,
142  std::shared_ptr<std::vector<std::unique_ptr<ServerCompletionQueue>>>
143  sync_server_cqs,
144  int min_pollers, int max_pollers, int sync_cq_timeout_msec);
145 
148  bool RegisterService(const grpc::string* host, Service* service) override;
149 
152  void RegisterAsyncGenericService(AsyncGenericService* service) override;
153 
167  int AddListeningPort(const grpc::string& addr,
168  ServerCredentials* creds) override;
169 
176  void Start(ServerCompletionQueue** cqs, size_t num_cqs) override;
177 
178  void PerformOpsOnCall(internal::CallOpSetInterface* ops,
179  internal::Call* call) override;
180 
181  void ShutdownInternal(gpr_timespec deadline) override;
182 
183  int max_receive_message_size() const override {
184  return max_receive_message_size_;
185  };
186 
187  grpc_server* server() override { return server_; };
188 
189  ServerInitializer* initializer();
190 
191  const int max_receive_message_size_;
192 
196  std::shared_ptr<std::vector<std::unique_ptr<ServerCompletionQueue>>>
197  sync_server_cqs_;
198 
201  std::vector<std::unique_ptr<SyncRequestThreadManager>> sync_req_mgrs_;
202 
203  // Sever status
204  std::mutex mu_;
205  bool started_;
206  bool shutdown_;
207  bool shutdown_notified_; // Was notify called on the shutdown_cv_
208 
209  std::condition_variable shutdown_cv_;
210 
211  std::shared_ptr<GlobalCallbacks> global_callbacks_;
212 
213  std::vector<grpc::string> services_;
214  bool has_generic_service_;
215 
216  // Pointer to the wrapped grpc_server.
217  grpc_server* server_;
218 
219  std::unique_ptr<ServerInitializer> server_initializer_;
220 
221  std::unique_ptr<HealthCheckServiceInterface> health_check_service_;
222  bool health_check_service_disabled_;
223 };
224 
225 } // namespace grpc
226 
227 #endif // GRPCXX_SERVER_H
std::string string
Definition: config.h:35
friend class ServerInitializer
Definition: server.h:104
void Wait() override
Block until the server shuts down.
virtual void AddPort(Server *server, const grpc::string &addr, ServerCredentials *creds, int port)
Called after a server port is added.
Definition: server.h:80
Options for channel creation.
Definition: channel_arguments.h:39
Desriptor of an RPC service and its various RPC methods.
Definition: service_type.h:58
Definition: server_initializer.h:32
struct grpc_server grpc_server
A server listens to some port and responds to request calls.
Definition: grpc_types.h:66
virtual ~GlobalCallbacks()
Definition: server.h:70
Definition: async_generic_service.h:45
static void SetGlobalCallbacks(GlobalCallbacks *callbacks)
Set the global callback object.
Classes that require gRPC to be initialized should inherit from this class.
Definition: grpc_library.h:37
The gRPC server uses this interface to expose the health checking service without depending on protob...
Definition: health_check_service_interface.h:31
virtual void PreSynchronousRequest(ServerContext *context)=0
Called before application callback for each synchronous server request.
virtual void PreServerStart(Server *server)
Called before server is started.
Definition: server.h:78
Wrapper around grpc_server_credentials, a way to authenticate a server.
Definition: server_credentials.h:35
Represents a gRPC server.
Definition: server.h:52
A ServerContext allows the person implementing a service handler to:
Definition: server_context.h:96
Definition: server_interface.h:47
An abstract collection of call ops, used to generate the grpc_call_op structure to pass down to the l...
Definition: call.h:611
Global callbacks are a set of hooks that are called when server events occur.
Definition: server.h:68
Analogous to struct timespec.
Definition: gpr_types.h:47
grpc_server * c_server()
virtual void UpdateArguments(ChannelArguments *args)
Called before server is created.
Definition: server.h:72
A specific type of completion queue used by the processing of notifications by servers.
Definition: completion_queue.h:321
virtual void PostSynchronousRequest(ServerContext *context)=0
Called after application callback for each synchronous server request.
HealthCheckServiceInterface * GetHealthCheckService() const
Returns the health check service.
Definition: server.h:94
A builder class for the creation and startup of grpc::Server instances.
Definition: server_builder.h:53
std::shared_ptr< Channel > InProcessChannel(const ChannelArguments &args)
Establish a channel for in-process communication.
Straightforward wrapping of the C call object.
Definition: call.h:683