peer-connection/helpers/refresh-connection/restartMCUConnection.js

import Skylink from '../../../index';
import sendRestartOfferMsg from './sendRestartOfferMsg';
import { PEER_TYPE } from '../../../constants';

/**
 * @param {SkylinkState} roomState
 * @param {boolean} [doIceRestart = false]
 * @param {Object} [bwOptions = {}]
 * @param {JSON} bwOptions.bandwidth
 * @param {JSON} bwOptions.googleXBandwidth
 * @returns {Promise}
 * @memberOf PeerConnection.PeerConnectionHelpers
 */
const restartMCUConnection = (roomState, doIceRestart, bwOptions) => new Promise((resolve) => {
  const updatedRoomState = roomState;
  const initOptions = Skylink.getInitOptions();
  const { mcuUseRenegoRestart } = initOptions;

  try {
    if (bwOptions.bandwidth && typeof bwOptions.bandwidth === 'object') {
      if (typeof bwOptions.bandwidth.audio === 'number') {
        updatedRoomState.streamsBandwidthSettings.bAS.audio = bwOptions.bandwidth.audio;
      }
      if (typeof bwOptions.bandwidth.video === 'number') {
        updatedRoomState.streamsBandwidthSettings.bAS.video = bwOptions.bandwidth.video;
      }
      if (typeof bwOptions.bandwidth.data === 'number') {
        updatedRoomState.streamsBandwidthSettings.bAS.data = bwOptions.bandwidth.data;
      }
    }

    if (bwOptions.googleXBandwidth && typeof bwOptions.googleXBandwidth === 'object') {
      if (typeof bwOptions.googleXBandwidth.min === 'number') {
        updatedRoomState.streamsBandwidthSettings.googleX.min = bwOptions.googleXBandwidth.min;
      }
      if (typeof bwOptions.googleXBandwidth.max === 'number') {
        updatedRoomState.streamsBandwidthSettings.googleX.max = bwOptions.googleXBandwidth.max;
      }
    }

    if (mcuUseRenegoRestart) {
      updatedRoomState.peerEndOfCandidatesCounter.MCU = updatedRoomState.peerEndOfCandidatesCounter.MCU || {};
      updatedRoomState.peerEndOfCandidatesCounter.MCU.len = 0;

      Skylink.setSkylinkState(updatedRoomState);
      resolve(sendRestartOfferMsg(updatedRoomState, PEER_TYPE.MCU, doIceRestart));
    }
  } catch (error) {
    resolve([PEER_TYPE.MCU, error]);
  }
});

export default restartMCUConnection;