addChunk method

List<SseEvent> addChunk(
  1. String chunk
)

Feeds a raw chunk and returns every complete event it terminated.

Implementation

List<SseEvent> addChunk(String chunk) {
  _buffer.write(chunk);
  final events = <SseEvent>[];

  var text = _buffer.toString();
  var consumed = 0;

  while (true) {
    final frameEnd = _findFrameEnd(text, consumed);
    if (frameEnd == -1) break; // frame not complete yet
    final frame = text.substring(consumed, frameEnd);
    consumed = frameEnd;
    final event = _parseFrame(frame);
    if (event != null) events.add(event);
  }

  if (consumed > 0) {
    _buffer.clear();
    _buffer.write(text.substring(consumed));
  }
  return events;
}