| 
					
				 | 
			
			
				@@ -55,13 +55,18 @@ class ServerBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ~ServerBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Options for synchronous servers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  enum SyncServerOption { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    NUM_CQS,         ///< Number of completion queues. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MIN_POLLERS,     ///< Minimum number of polling threads. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MAX_POLLERS,     ///< Maximum number of polling threads. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    CQ_TIMEOUT_MSEC  ///< Completion queue timeout in milliseconds. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ////////////////////////////////////////////////////////////////////////////// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Primary API's 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Return a running server which is ready for processing calls. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Before calling, one typically needs to ensure that: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///  1. a service is registered - so that the server knows what to serve 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///     (via RegisterService, or RegisterAsyncGenericService) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///  2. a listening port has been added - so the server knows where to receive 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///     traffic (via AddListeningPort) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///  3. [for async api only] completion queues have been added via 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ///     AddCompletionQueue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::unique_ptr<Server> BuildAndStart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Register a service. This call does not take ownership of the service. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// The service must exist for the lifetime of the \a Server instance returned 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -69,9 +74,60 @@ class ServerBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Matches requests with any :authority 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder& RegisterService(Service* service); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Register a generic service. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Matches requests with any :authority 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Enlists an endpoint \a addr (port with an optional IP address) to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// bind the \a grpc::Server object to be created to. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// It can be invoked multiple times. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// \param addr_uri The address to try to bind to the server in URI form. If 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// the scheme name is omitted, "dns:///" is assumed. To bind to any address, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// connections.  Valid values include dns:///localhost:1234, / 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 192.168.1.1:31416, dns:///[::1]:27182, etc.). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// \param creds The credentials associated with the server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// \param selected_port[out] If not `nullptr`, gets populated with the port 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// number bound to the \a grpc::Server for the corresponding endpoint after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// it is successfully bound, 0 otherwise. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ServerBuilder& AddListeningPort(const grpc::string& addr_uri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  std::shared_ptr<ServerCredentials> creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                  int* selected_port = nullptr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Add a completion queue for handling asynchronous services. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Best performance is typically obtained by using one thread per polling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// completion queue. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Caller is required to shutdown the server prior to shutting down the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// returned completion queue. Caller is also required to drain the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// completion queue after shutting it down. A typical usage scenario: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// // While building the server: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// ServerBuilder builder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// cq_ = builder.AddCompletionQueue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// server_ = builder.BuildAndStart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// // While shutting down the server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// server_->Shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// cq_->Shutdown();  // Always *after* the associated server's Shutdown()! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// // Drain the cq_ that was created 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// void* ignored_tag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// bool ignored_ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// while (cq_->Next(&ignored_tag, &ignored_ok)) { } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// \param is_frequently_polled This is an optional parameter to inform gRPC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// library about whether this completion queue would be frequently polled 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// (i.e. by calling \a Next() or \a AsyncNext()). The default value is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// 'true' and is the recommended setting. Setting this to 'false' (i.e. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// not polling the completion queue frequently) will have a significantly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// negative performance impact and hence should not be used in production 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// use cases. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::unique_ptr<ServerCompletionQueue> AddCompletionQueue( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bool is_frequently_polled = true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ////////////////////////////////////////////////////////////////////////////// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // RegisterService variants 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Register a service. This call does not take ownership of the service. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// The service must exist for the lifetime of the \a Server instance returned 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,6 +135,13 @@ class ServerBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Only matches requests with :authority \a host 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder& RegisterService(const grpc::string& host, Service* service); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Register a generic service. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Matches requests with any :authority 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ////////////////////////////////////////////////////////////////////////////// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Fine control knobs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Set max receive message size in bytes. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder& SetMaxReceiveMessageSize(int max_receive_message_size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     max_receive_message_size_ = max_receive_message_size; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -119,6 +182,14 @@ class ServerBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder& SetOption(std::unique_ptr<ServerBuilderOption> option); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /// Options for synchronous servers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  enum SyncServerOption { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    NUM_CQS,         ///< Number of completion queues. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MIN_POLLERS,     ///< Minimum number of polling threads. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MAX_POLLERS,     ///< Maximum number of polling threads. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CQ_TIMEOUT_MSEC  ///< Completion queue timeout in milliseconds. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// Only useful if this is a Synchronous server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ServerBuilder& SetSyncServerOption(SyncServerOption option, int value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,59 +200,6 @@ class ServerBuilder { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return SetOption(MakeChannelArgumentOption(arg, value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Enlists an endpoint \a addr (port with an optional IP address) to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// bind the \a grpc::Server object to be created to. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// It can be invoked multiple times. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// \param addr_uri The address to try to bind to the server in URI form. If 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// the scheme name is omitted, "dns:///" is assumed. To bind to any address, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// connections.  Valid values include dns:///localhost:1234, / 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 192.168.1.1:31416, dns:///[::1]:27182, etc.). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// \param creds The credentials associated with the server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// \param selected_port[out] If not `nullptr`, gets populated with the port 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// number bound to the \a grpc::Server for the corresponding endpoint after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// it is successfully bound, 0 otherwise. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // TODO(dgq): the "port" part seems to be a misnomer. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ServerBuilder& AddListeningPort(const grpc::string& addr_uri, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  std::shared_ptr<ServerCredentials> creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                  int* selected_port = nullptr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Add a completion queue for handling asynchronous services. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Caller is required to shutdown the server prior to shutting down the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// returned completion queue. Caller is also required to drain the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// completion queue after shutting it down. A typical usage scenario: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// // While building the server: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// ServerBuilder builder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// cq_ = builder.AddCompletionQueue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// server_ = builder.BuildAndStart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// // While shutting down the server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// server_->Shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// cq_->Shutdown();  // Always *after* the associated server's Shutdown()! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// // Drain the cq_ that was created 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// void* ignored_tag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// bool ignored_ok; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// while (cq_->Next(&ignored_tag, &ignored_ok)) { } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// \param is_frequently_polled This is an optional parameter to inform gRPC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// library about whether this completion queue would be frequently polled 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// (i.e. by calling \a Next() or \a AsyncNext()). The default value is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// 'true' and is the recommended setting. Setting this to 'false' (i.e. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// not polling the completion queue frequently) will have a significantly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// negative performance impact and hence should not be used in production 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// use cases. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  std::unique_ptr<ServerCompletionQueue> AddCompletionQueue( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      bool is_frequently_polled = true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /// Return a running server which is ready for processing calls. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  std::unique_ptr<Server> BuildAndStart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /// For internal use only: Register a ServerBuilderPlugin factory function. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   static void InternalAddPluginFactory( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)()); 
			 |