close method

Future<void> close([
  1. Object? reason
])

Closes the state and all owned resources. Repeated calls are harmless.

Implementation

Future<void> close([Object? reason]) {
  if (_isClosed) {
    return closed;
  }
  _isClosed = true;
  _closeReason = reason;
  _pendingRoutes.clear();
  _pendingRouteVersions.clear();
  _clientResponseRoutes.clear();
  _clientResponseRouteVersions.clear();
  final Object waiterError =
      reason ?? StateError('ACP server connection closed');
  for (final Completer<Object?> waiter in _responseWaiters.values) {
    waiter.completeError(waiterError);
  }
  _responseWaiters.clear();

  final List<AcpOutboundHub<Object?>> sessionHubs = _sessionHubs.values
      .toList();
  _sessionHubs.clear();
  final StreamSubscription<Object?>? outboundSubscription =
      _outboundSubscription;
  _outboundSubscription = null;
  final Future<void> writeTail = _writeTail;
  unawaited(_finishClose(sessionHubs, outboundSubscription, writeTail));
  return closed;
}