def remote_read
      ops = { RECV_MESSAGE => nil }
      ops[RECV_INITIAL_METADATA] = nil unless @metadata_received
      batch_result = @call.run_batch(ops)
      unless @metadata_received
        @call.metadata = batch_result.metadata
        @metadata_received = true
      end
      get_message_from_batch_result(batch_result)
    end
def remote_read
      ops = { RECV_MESSAGE => nil }
      ops[RECV_INITIAL_METADATA] = nil unless @metadata_received
      batch_result = @call.run_batch(ops)
      unless @metadata_received
        @call.metadata = batch_result.metadata
        @metadata_received = true
      end
      get_message_from_batch_result(batch_result)
    end
remote_read reads a response from the remote endpoint.

 It blocks until the remote endpoint replies with a message or status.
 On receiving a message, it returns the response after unmarshalling it.
 On receiving a status, it returns nil if the status is OK, otherwise
 raising BadStatus