


# sendMessageWithResponse method








void sendMessageWithResponse
([OutgoingMessage](../../package-fidl_fidl/OutgoingMessage-class.md) message, Completer completer)





<p>Sends the given messages over the bound channel and registers a Completer
to handle the response.</p>
<p>Used by subclasses of <a href="../../package-fidl_fidl/AsyncProxy-class.md">AsyncProxy&lt;T&gt;</a> to send encoded messages.</p>



## Implementation

```dart
void sendMessageWithResponse(
    OutgoingMessage message, Completer<dynamic> completer) {
  if (!_reader.isBound) {
    proxyError(FidlStateException(
        'AsyncProxyController<${$interfaceName}> is closed.'));
    return;
  }

  const int _userspaceTxidMask = 0x7FFFFFFF;

  int txid = _nextTxid++ & _userspaceTxidMask;
  while (txid == 0 || _completerMap.containsKey(txid))
    txid = _nextTxid++ & _userspaceTxidMask;
  message.txid = txid;
  _completerMap[message.txid] = completer;
  final int status =
      _reader.channel!.writeEtc(message.data, message.handleDispositions);

  if (status != ZX.OK) {
    proxyError(FidlError(
        'AsyncProxyController<${$interfaceName}> failed to write to channel: ${_reader.channel} (status: $status)'));
    return;
  }
}
```







