| |
| |
| |
| # 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<T></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; |
| } |
| } |
| ``` |
| |
| |
| |
| |
| |
| |
| |