drain method
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;
}
}