Home Reference Source

core/live/pubnub-listener.js

import { EventEmitter } from 'events';

const statusPrefix = 'status:';
const unclassifiedEvents = 'pubNubEventsNotRouted';

/**
 * @private
 */
export class PubNubListener extends EventEmitter {

  static get statusPrefix() {
    return statusPrefix;
  }

  static get unclassifiedEvents() {
    return unclassifiedEvents;
  }

  /** @param {PubNubMessage} m */
  message(m) {
    this.emit(m.channel, m.message);
  }

  /** @param {PubNubStatus} s */
  status(s) {
    const allEvents = this._getEventNamesFromStatus(s.affectedChannels, s.affectedChannelGroups);
    if (allEvents.length) {
      allEvents.forEach((channelOrGroup) => {
        this.emit(`${PubNubListener.statusPrefix}${channelOrGroup}`, s);
      });
    } else {
      this.emit(PubNubListener.unclassifiedEvents, s);
    }
  }

  /**
   * @private
   * @param {string[]} [affectedChannels]
   * @param {string[]} [affectedChannelGroups]
   */
  _getEventNamesFromStatus(affectedChannels, affectedChannelGroups) {
    const channels = affectedChannels || [];
    const groups = affectedChannelGroups || [];
    return channels.concat(groups);
  }
}