deliverData method

void deliverData(
  1. Uint8List data
)

Delivers data from the socket's connection-level receive ordering.

Implementation

void deliverData(Uint8List data) {
  if (data.isEmpty) return;
  bytesRead += data.length;
  if (!_dataController.isClosed) {
    _dataController.add(data);
  }
  if (_socket != null) {
    _socket!.onStreamDataProcessed(data.length);
  }
  // Send stream-level window update when 25% of receive window consumed.
  // Without this, the peer's stream flow controller blocks after exhausting
  // the initial 64KB window — killing the entire yamux mux on this stream.
  _bytesReceivedSinceWindowUpdate += data.length;
  if (_bytesReceivedSinceWindowUpdate > _receiveWindow ~/ 4) {
    _receiveWindow += _bytesReceivedSinceWindowUpdate;
    _bytesReceivedSinceWindowUpdate = 0;
    if (_connected && remoteId != null && _socket != null && !_socket!.closing) {
      _socket!.sendStreamPacket(
        remoteId!,
        id,
        [WindowUpdateFrame(windowSize: _receiveWindow)],
        trackForRetransmit: false,
      );
    }
  }
}