deliverData method
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,
);
}
}
}