Skip to content

if message length exceeds 4096 bytes, it won't get processed correctly #46

@mewalig

Description

@mewalig

Here is a fix. It also performs better. Basically, it effectively does not increment the cache unless that data was actually processed into a MessageEvent.

  1. replace the cache variable with chars_processed
  2. replace the cache = '' line with chars_processed = 0
  3. replace the event handling code with:
          // process this.responseText
          var parts = responseText.substr(chars_processed).split("\n"),
              eventType = 'message',
              data = [],
              i = 0,
              line = '';

          // TODO handle 'event' (for buffer name), retry
          var temp_chars_processed = 0;
          for (; i < parts.length; i++) {
            line = parts[i].replace(reTrim, '');
            temp_chars_processed += line.length + (i + 1 == parts.length ? 0 : 1);
            if (line.startsWith('event')) {
              eventType = line.replace(/event:?\s*/, '');
            } else if (line.startsWith('retry')) {
              retry = parseInt(line.replace(/retry:?\s*/, ''));
              if(!isNaN(retry)) { interval = retry; }
            } else if (line.startsWith('data')) {
              data.push(line.replace(/data:?\s*/, ''));
            } else if (line.startsWith('id:')) {
              lastEventId = line.replace(/id:?\s*/, '');
            } else if (line.startsWith('id')) { // this resets the id
              lastEventId = null;
            } else if (line == '') {
              if (data.length) {
                var event = new MessageEvent(data.join('\n'), eventsource.url, lastEventId);
                eventsource.dispatchEvent(eventType, event);
                data = [];
                eventType = 'message';
                chars_processed += temp_chars_processed;
              }
            }
          }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions