close method

  1. @override
Future<void> close()
override

Closes the stream for both reading and writing

Implementation

@override
Future<void> close() async {
  await _closedLock.synchronized(() async {
    if (_isClosed) return;
    _isClosed = true;
    _logger.fine('Closing stream $_id');

    try {
      await _underlyingMuxedStream.close();
    } catch (e, s) {
      _logger.warning('Error closing underlying muxed stream for stream $_id: $e\n$s');
    }

    // Only clean up scope once to prevent double cleanup
    if (!_scopeCleanedUp) {
      _logger.fine('Stream $_id: Cleaning up management scope');
      _managementScope.done();
      _scopeCleanedUp = true;
    } else {
      _logger.fine('Stream $_id: Scope already cleaned up, skipping');
    }

    // Let SwarmConn handle its own cleanup without additional scope cleanup
    await _conn.removeStream(this);
    _logger.fine('Stream $_id closed and removed from connection');
  });
}