|  | @@ -64,6 +64,15 @@ class ClientStreamingInterface {
 | 
	
		
			
				|  |  |    virtual Status Finish() = 0;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/// Common interface for all synchronous server side streaming.
 | 
	
		
			
				|  |  | +class ServerStreamingInterface {
 | 
	
		
			
				|  |  | + public:
 | 
	
		
			
				|  |  | +  virtual ~ServerStreamingInterface() {}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /// Blocking send initial metadata to client.
 | 
	
		
			
				|  |  | +  virtual void SendInitialMetadata() = 0;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /// An interface that yields a sequence of messages of type \a R.
 | 
	
		
			
				|  |  |  template <class R>
 | 
	
		
			
				|  |  |  class ReaderInterface {
 | 
	
	
		
			
				|  | @@ -336,12 +345,17 @@ class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
 | 
	
		
			
				|  |  |    Call call_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/// Server-side interface for streaming reads of message of type \a R.
 | 
	
		
			
				|  |  | +template <class R>
 | 
	
		
			
				|  |  | +class ServerReaderInterface : public ServerStreamingInterface,
 | 
	
		
			
				|  |  | +                              public ReaderInterface<R> {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  template <class R>
 | 
	
		
			
				|  |  | -class ServerReader GRPC_FINAL : public ReaderInterface<R> {
 | 
	
		
			
				|  |  | +class ServerReader GRPC_FINAL : public ServerReaderInterface<R> {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  |    ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void SendInitialMetadata() {
 | 
	
		
			
				|  |  | +  void SendInitialMetadata() GRPC_OVERRIDE {
 | 
	
		
			
				|  |  |      GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      CallOpSet<CallOpSendInitialMetadata> ops;
 | 
	
	
		
			
				|  | @@ -367,12 +381,17 @@ class ServerReader GRPC_FINAL : public ReaderInterface<R> {
 | 
	
		
			
				|  |  |    ServerContext* const ctx_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/// Server-side interface for streaming writes of message of type \a W.
 | 
	
		
			
				|  |  |  template <class W>
 | 
	
		
			
				|  |  | -class ServerWriter GRPC_FINAL : public WriterInterface<W> {
 | 
	
		
			
				|  |  | +class ServerWriterInterface : public ServerStreamingInterface,
 | 
	
		
			
				|  |  | +                              public WriterInterface<W> {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +template <class W>
 | 
	
		
			
				|  |  | +class ServerWriter GRPC_FINAL : public ServerWriterInterface<W> {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  |    ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void SendInitialMetadata() {
 | 
	
		
			
				|  |  | +  void SendInitialMetadata() GRPC_OVERRIDE {
 | 
	
		
			
				|  |  |      GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      CallOpSet<CallOpSendInitialMetadata> ops;
 | 
	
	
		
			
				|  | @@ -411,12 +430,16 @@ class ServerWriter GRPC_FINAL : public WriterInterface<W> {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /// Server-side interface for bi-directional streaming.
 | 
	
		
			
				|  |  |  template <class W, class R>
 | 
	
		
			
				|  |  | -class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
 | 
	
		
			
				|  |  | -                                      public ReaderInterface<R> {
 | 
	
		
			
				|  |  | +class ServerReaderWriterInterface : public ServerStreamingInterface,
 | 
	
		
			
				|  |  | +                                    public WriterInterface<W>,
 | 
	
		
			
				|  |  | +                                    public ReaderInterface<R> {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +template <class W, class R>
 | 
	
		
			
				|  |  | +class ServerReaderWriter GRPC_FINAL : public ServerReaderWriterInterface<W, R> {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  |    ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void SendInitialMetadata() {
 | 
	
		
			
				|  |  | +  void SendInitialMetadata() GRPC_OVERRIDE {
 | 
	
		
			
				|  |  |      GPR_CODEGEN_ASSERT(!ctx_->sent_initial_metadata_);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      CallOpSet<CallOpSendInitialMetadata> ops;
 |