Files
jizhi/frontend/lib/shared/api/sse_frame_accumulator.dart
T
2026-07-24 23:11:20 +08:00

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];
}
}