drain method

void drain(
  1. void process(
    1. Msg msg
    )
)

Drains buffered messages to process.

Implementation

void drain(void Function(Msg msg) process) {
  if (_draining) return;
  if (_buffered.isEmpty) return;
  _draining = true;
  try {
    final pending = List<Msg>.from(_buffered);
    _buffered.clear();
    for (final m in pending) {
      process(m);
    }
  } finally {
    _draining = false;
  }
}