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