AcpHttpClientTransport constructor

AcpHttpClientTransport(
  1. Uri endpoint, {
  2. AcpHttpAdapter? adapter,
  3. AcpHttpHeaders headers = const AcpHttpHeaders(),
  4. AcpHttpCookiePolicy cookiePolicy = AcpHttpCookiePolicy.include,
  5. AcpAffinityCookieStore? cookieStore,
  6. AcpHttpClientLimits limits = const AcpHttpClientLimits(),
  7. JsonRpcCodec codec = const JsonRpcCodec(),
  8. AcpRemoteDiagnosticHandler? onDiagnostic,
})

Creates a lazy transport for endpoint.

Supplying adapter or cookieStore keeps ownership with the caller.

Implementation

AcpHttpClientTransport(
  this.endpoint, {
  AcpHttpAdapter? adapter,
  AcpHttpHeaders headers = const AcpHttpHeaders(),
  AcpHttpCookiePolicy cookiePolicy = AcpHttpCookiePolicy.include,
  AcpAffinityCookieStore? cookieStore,
  AcpHttpClientLimits limits = const AcpHttpClientLimits(),
  JsonRpcCodec codec = const JsonRpcCodec(),
  AcpRemoteDiagnosticHandler? onDiagnostic,
}) : _adapter = adapter ?? createPlatformHttpAdapter(),
     _ownsAdapter = adapter == null,
     _headers = headers,
     _cookiePolicy = cookiePolicy,
     _cookieStore = cookieStore ?? AcpAffinityCookieStore(),
     _ownsCookieStore = cookieStore == null,
     _limits = limits,
     _codec = codec,
     _onDiagnostic = onDiagnostic {
  if (endpoint.scheme != 'http' && endpoint.scheme != 'https') {
    throw ArgumentError.value(endpoint, 'endpoint', 'must use http or https');
  }
  limits.validate();
  // The controller is an owned field and is closed by [close] or [_fail].
  // ignore: close_sinks
  late final StreamController<JsonRpcWireMessage> incoming;
  incoming = StreamController<JsonRpcWireMessage>(onCancel: _cancelReadable);
  _incoming = incoming;
  stream = AcpDuplexStream<JsonRpcWireMessage>(
    readable: incoming.stream,
    writable: AcpWritable<JsonRpcWireMessage>(
      write: _enqueueWrite,
      close: close,
    ),
  );
}