write method
Writes data to the stream
Implementation
@override
Future<void> write(List<int> data) async {
final inputDataLength = data.length;
_log.fine('$_logPrefix YamuxStream.write: ENTERED. Requested to write $inputDataLength bytes. Current state: $_state, Our send window (remote receive): $_remoteReceiveWindow');
// Check deadline before starting write operation
_checkDeadline();
if (_localFinSent) {
_log.warning('$_logPrefix YamuxStream.write: Called after closeWrite(). State: $_state.');
throw StateError('Stream is closed for writing.');
}
if (_state != YamuxStreamState.open) {
_log.warning('$_logPrefix YamuxStream.write: Called on non-open stream. State: $_state. Requested: $inputDataLength bytes.');
throw StateError('Stream is not open for writing. Current state: $_state');
}
if (inputDataLength == 0) {
_log.fine('$_logPrefix YamuxStream.write: Requested to write 0 bytes. No action taken.');
return;
}
// Use adaptive backpressure handling for large writes or slow transports
if (_shouldUseBackpressureHandling(data)) {
return await _writeWithBackpressure(data);
}
// Use direct write for small writes or fast transports
return await _writeDirectly(data);
}