ice-connection/helpers/addIceCandidateToQueue.js

import Skylink from '../../index';
import logger from '../../logger';
import MESSAGES from '../../messages';
import { TAGS, CANDIDATE_PROCESSING_STATE } from '../../constants';
import HandleIceCandidateStats from '../../skylink-stats/handleIceCandidateStats';
import { dispatchEvent } from '../../utils/skylinkEventManager';
import { candidateProcessingState } from '../../skylink-events';

/**
 * Method that buffers candidates
 * @param {String} targetMid
 * @param {String} candidateId
 * @param {String} candidateType
 * @param {RTCIceCandidate} nativeCandidate
 * @param {SkylinkState} state
 * @memberOf IceConnectionHelpers
 * @private
 */
const addIceCandidateToQueue = (targetMid, candidateId, candidateType, nativeCandidate, state) => {
  const { STATS_MODULE: { HANDLE_ICE_GATHERING_STATS } } = MESSAGES;
  const updatedState = state;
  const { room } = updatedState;
  const handleIceCandidateStats = new HandleIceCandidateStats();

  logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, MESSAGES.ICE_CANDIDATE.CANDIDATE_HANDLER.ADD_CANDIDATE_TO_BUFFER]);

  handleIceCandidateStats.send(room.id, HANDLE_ICE_GATHERING_STATS.BUFFERED, targetMid, candidateId, nativeCandidate);
  dispatchEvent(candidateProcessingState({
    room,
    state: CANDIDATE_PROCESSING_STATE.BUFFERED,
    peerId: targetMid,
    candidateId,
    candidateType,
    candidate: nativeCandidate.candidate,
    error: null,
  }));

  updatedState.peerCandidatesQueue[targetMid] = updatedState.peerCandidatesQueue[targetMid] || [];
  updatedState.peerCandidatesQueue[targetMid].push([candidateId, nativeCandidate]);
  Skylink.setSkylinkState(updatedState, room.id);
};

export default addIceCandidateToQueue;