write method

  1. @override
Future<void> write(
  1. List<int> data
)
override

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);
}