     return returnMessage
   }
 
-  /// Call this to wait for a result. Nonblocking.
-  internal func receive(completion:@escaping (Echo_EchoResponse?, Echo_EchoClientError?)->()) throws {
+  func closeSend() throws {
+    let sem = DispatchSemaphore(value: 0)
+    try closeSend() {
+      sem.signal()
+    }
+    _ = sem.wait(timeout: DispatchTime.distantFuture)
+  }
+}
+
+fileprivate final class Echo_EchoUpdateCallImpl: Echo_EchoUpdateCall {
+  private var call : Call
+
+  /// Create a call.
+  init(_ channel: Channel) {
+    self.call = channel.makeCall("/echo.Echo/Update")
+  }
+
+  /// Call this to start a call. Nonblocking.
+  func start(metadata:Metadata, completion:@escaping (CallResult)->())
+    throws -> Echo_EchoUpdateCall {
+      try self.call.start(.bidiStreaming, metadata:metadata, completion:completion)
+      return self
+  }
+
+  func receive(completion:@escaping (Echo_EchoResponse?, Echo_EchoClientError?)->()) throws {
     do {
       try call.receiveMessage() {(data) in
         if let data = data {

      return self
  }

  /// Call this to wait for a result. Blocking.
  internal func receive() throws -> Echo_EchoResponse {
    var returnError : Echo_EchoClientError?
    var returnResponse : Echo_EchoResponse!
    let sem = DispatchSemaphore(value: 0)
    do {
      try receive() {response, error in
        returnResponse = response
        returnError = error
        sem.signal()
      }
      _ = sem.wait(timeout: DispatchTime.distantFuture)
    }
    if let returnError = returnError {
      throw returnError
    }
    return returnResponse
  }

  /// Call this to wait for a result. Nonblocking.
  internal func receive(completion:@escaping (Echo_EchoResponse?, Echo_EchoClientError?)->()) throws {
    do {
      try call.receiveMessage() {(responseData) in
        if let responseData = responseData {

    }
  }

  func send(_ response: Echo_EchoResponse, completion: @escaping ()->()) throws {
    try handler.sendResponse(message:response.serializedData()) {completion()}
  }

  func close() throws {
    let sem = DispatchSemaphore(value: 0)
    try self.handler.sendStatus(statusCode:self.statusCode,
                                statusMessage:self.statusMessage,
