23 lines
629 B
Dart
23 lines
629 B
Dart
class SseFrameAccumulator {
|
|
String _pending = '';
|
|
|
|
List<String> add(String chunk) {
|
|
_pending = (_pending + chunk).replaceAll('\r\n', '\n');
|
|
final frames = <String>[];
|
|
var separator = _pending.indexOf('\n\n');
|
|
while (separator >= 0) {
|
|
final frame = _pending.substring(0, separator);
|
|
_pending = _pending.substring(separator + 2);
|
|
if (frame.trim().isNotEmpty) frames.add(frame);
|
|
separator = _pending.indexOf('\n\n');
|
|
}
|
|
return frames;
|
|
}
|
|
|
|
List<String> close() {
|
|
final trailing = _pending.trim();
|
|
_pending = '';
|
|
return trailing.isEmpty ? const [] : [trailing];
|
|
}
|
|
}
|