zoom_rawdata.js

const { ZoomSDKError } = require('./settings.js');
const messages = require('./electron_sdk_pb.js');

var ZoomRawData = (function () {
  let instance;
  /**
   * Zoom Raw Data
   * @module zoom_rawdata
   * @param {Function} onRawDataStatusChanged onRawDataStatusChanged callback
   * @return {ZoomRawData}
   */
  function init(opts) {
    
    let clientOpts = opts || {};

    // Private methods and variables
    let _addon = clientOpts.addon.GetRawdataAPIWrap() || null;
    let _onRawDataStatusChanged = clientOpts.onRawDataStatusChanged || null;

    /**
      onRawDataStatusChanged
      @event onRawDataStatusChanged
      @param {Number} status
    */
    function onRawDataStatusChanged(status, recv_handle) {
      if (_onRawDataStatusChanged) {
        _onRawDataStatusChanged(status, recv_handle)
      }
    }

    if (_addon) {
      _addon.SetonRawDataStatusChangedCB(onRawDataStatusChanged);
    }

    return {
      /** 
      * SetonRawDataStatusChangedCB
      * @method SetonRawDataStatusChangedCB
      * @param {Function} onRawDataStatusChanged
      * @return {Boolean}
      */
      SetonRawDataStatusChangedCB: function (onRawDataStatusChanged) {
        if (_addon && onRawDataStatusChanged && onRawDataStatusChanged instanceof Function) {
          _onRawDataStatusChanged = onRawDataStatusChanged;
          return true;
        }
        return false;
      },
      /** 
      * HasRawDataLicense
      * @method HasRawDataLicense
      * @return {Boolean}
      */
      HasRawDataLicense: function () {
        if (_addon) {
          return _addon.HasRawDataLicense();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * CreateRenderer
      * @method CreateRenderer
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      CreateRenderer: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let CreateRendererParams = new messages.CreateRendererParams();
            CreateRendererParams.setRecvhandle(Number(recv_handle));
            let bytes = CreateRendererParams.serializeBinary();
            return _addon.CreateRenderer(bytes);            
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * DestroyRenderer
      * @method DestroyRenderer
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      DestroyRenderer: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let DestroyRendererParams = new messages.DestroyRendererParams();
            DestroyRendererParams.setRecvhandle(Number(recv_handle));
            let bytes = DestroyRendererParams.serializeBinary();
            return _addon.DestroyRenderer(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * Show the data of the specified user through normal render mode.
      * @method Subscribe
      * @param {Number} subscribeId If 'type' is RAW_DATA_TYPE_VIDEO, 'subscribeId' refers to the user ID, otherwise it refers to the shared source ID of user.
      * @param {Number} rawdataType Specify the raw data type.
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      Subscribe: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let subscribeId = clientOpts.subscribeId;
          let rawdataType = clientOpts.rawdataType;
          let recv_handle = clientOpts.recv_handle;
          try {
            let SubscribeParams = new messages.SubscribeParams();
            SubscribeParams.setSubscribeid(Number(subscribeId));
            SubscribeParams.setRawdatatype(Number(rawdataType));
            SubscribeParams.setRecvhandle(Number(recv_handle));
            let bytes = SubscribeParams.serializeBinary();
            return _addon.Subscribe(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * UnSubscribe
      * @method UnSubscribe
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      UnSubscribe: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let UnSubscribeParams = new messages.UnSubscribeParams();
            UnSubscribeParams.setRecvhandle(Number(recv_handle));
            let bytes = UnSubscribeParams.serializeBinary();
            return _addon.UnSubscribe(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE;
      },
      /** 
      * SetRawDataResolution
      * @method SetRawDataResolution
      * @param {Number} resolution
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      SetRawDataResolution: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let resolution = clientOpts.resolution;
          let recv_handle = clientOpts.recv_handle;
          try {
            let SetRawDataResolutionParams = new messages.SetRawDataResolutionParams();
            SetRawDataResolutionParams.setResolution(Number(resolution));
            SetRawDataResolutionParams.setRecvhandle(Number(recv_handle));
            let bytes = SetRawDataResolutionParams.serializeBinary();
            return _addon.SetRawDataResolution(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * SetRawDataResolution
      * @method GetResolution
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      GetResolution: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let GetResolutionParams = new messages.GetResolutionParams();
            GetResolutionParams.setRecvhandle(Number(recv_handle));
            let bytes = GetResolutionParams.serializeBinary();
            return _addon.GetResolution(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * GetRawDataType
      * @method GetRawDataType
      * @param {Number} recv_handle
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      GetRawDataType: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let GetRawDataTypeParams = new messages.GetRawDataTypeParams();
            GetRawDataTypeParams.setRecvhandle(Number(recv_handle));
            let bytes = GetRawDataTypeParams.serializeBinary();
            return _addon.GetRawDataType(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * Get the subscribed ID specified when subscribing.
      * @method GetSubscribeId
      * @param {Number} recv_handle
      * @return {Number} The user ID.
      */
      GetSubscribeId: function (opts) {
        if (_addon) {
          let clientOpts = opts || {};
          let recv_handle = clientOpts.recv_handle;
          try {
            let GetSubscribeIdParams = new messages.GetSubscribeIdParams();
            GetSubscribeIdParams.setRecvhandle(Number(recv_handle));
            let bytes = GetSubscribeIdParams.serializeBinary();
            return _addon.GetSubscribeId(bytes);
          } catch (error) {
            return ZoomSDKError.SDKERR_INVALID_PARAMETER;
          }
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * InitAudioRawDataHelper
      * @method InitAudioRawDataHelper
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      InitAudioRawDataHelper: function () {
        if (_addon) {
          return _addon.InitAudioRawDataHelper();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * SubscribeAudioRawdata
      * @method SubscribeAudioRawdata
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      SubscribeAudioRawdata: function () {
        if (_addon) {
          return _addon.SubscribeAudioRawdata();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      },
      /** 
      * UnSubscribeAudioRawdata
      * @method UnSubscribeAudioRawdata
      * @return {Number} Defined in: {@link ZoomSDKError}
      */
      UnSubscribeAudioRawdata: function () {
        if (_addon) {
          return _addon.UnSubscribeAudioRawdata();
        }
        return ZoomSDKError.SDKERR_UNINITIALIZE
      }
    };
};
  return {
    getInstance: function (opts) {
      if (!instance) {
        instance = init(opts)
      }
      return instance
    }
  };
})();

module.exports = {
  ZoomRawData: ZoomRawData
}