Source: incomingImage.js

const Emitter = require('./emitter');
const Constants = require('./constants');

/**
 * @hideconstructor
 * @classdesc Incoming image class. Instances are returned as arguments for corresponding <code>ZCC.Session</code> events
 **/
class IncomingImage extends Emitter {

  constructor(messageData, session) {
    super();
    this.messageData = messageData;
    this.options = Object.assign({}, session.options, {messageData: messageData});
    this.instanceId = messageData.message_id;
    this.session = session;
    this.initSessionHandlers();
    this.clearHandlersAfterFetches = 2;
    this.numberOfFetches = 0;
  }

  initSessionHandlers() {
    this.incomingImageHandler = (data) => {
      this.numberOfFetches++;
      let eventName =
        data.packetId === Constants.IMAGE_TYPE_FULL ? Constants.EVENT_IMAGE_DATA : Constants.EVENT_THUMBNAIL_DATA;
      /**
       * Incoming image thumbnail data available
       * @event IncomingImage#image_thumbnail
       * @param {Uint8Array} data thumbnail data
       */
      /**
       * Incoming full image data available
       * @event IncomingImage#image
       * @param {Uint8Array} data full image data
       */
      this.emit(eventName, data.messageData);
      if (this.numberOfFetches === this.clearHandlersAfterFetches) {
        this.session.off([Constants.EVENT_INCOMING_IMAGE_DATA, this.instanceId], this.incomingImageHandler);
      }
    };
    this.session.on([Constants.EVENT_INCOMING_IMAGE_DATA, this.instanceId], this.incomingImageHandler);
  }
}

module.exports = IncomingImage;