close method
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;
}