blob: 81b00e3a849a621bdb7e457f715308733c4c1c2e [file] [log] [blame] [view]
# bind method
void bind
(T impl, [InterfaceRequest](../../package-fidl_fidl/InterfaceRequest-class.md) interfaceRequest)
<p>Binds the given implementation to the given interface request.</p>
<p>Listens for messages on channel underlying the given interface request,
decodes them, and dispatches the decoded messages to <code>impl</code>.</p>
<p>This object must not already be bound.</p>
<p>The <code>impl</code> and <code>interfaceRequest</code> parameters must not be <code>null</code>. The
<code>channel</code> property of the given <code>interfaceRequest</code> must not be <code>null</code>.</p>
<p>Implementation note: in a generic context, the inferred type when creating
the <code>interfaceRequest</code> may be a super-class of <code>T</code>, possibly <code>Service</code>.
Since concrete classes of <code>AsyncBinding</code> are code generated, the type
parameter <code>T</code> will always be precise, even when used in a generic context.
As a result, we cannot type-bound <code>interfaceRequest</code> statically, and
should instead rely on dynamic behavior.</p>
## Implementation
```dart
void bind(T impl, InterfaceRequest<dynamic> interfaceRequest) {
if (!isUnbound) {
throw FidlStateException("AsyncBinding<${$interfaceName}> isn't unbound");
}
if (impl == null) {
throw FidlError(
"AsyncBinding<${$interfaceName}> can't bind to a null impl");
}
Channel? channel = interfaceRequest.passChannel();
if (channel == null) {
throw FidlError(
"AsyncBinding<${$interfaceName}> can't bind to a null InterfaceRequest channel");
}
_impl = impl;
_reader.bind(channel);
state = InterfaceState.bound;
}
```