peer-data/helpers/getPeersDataChannels.js

import { isEmptyObj } from '../../utils/helpers';
import { SkylinkConstants } from '../../index';
import PeerConnection from '../../peer-connection';

const hasPeerDataChannels = dataChannels => !isEmptyObj(dataChannels);

/**
 * @description Function that gets the current list of connected Peers Datachannel connections in the Room.
 * @private
 * @param {SkylinkState} roomState
 * @return {Object} listOfPeersDataChannels
 * @memberOf PeerDataHelpers
 */
const getPeersDataChannels = (roomState) => {
  const { dataChannels } = roomState;
  const listOfPeersDataChannels = {};
  const listOfPeers = Object.keys(dataChannels);

  for (let i = 0; i < listOfPeers.length; i += 1) {
    const peerId = listOfPeers[i];
    listOfPeersDataChannels[peerId] = {};

    if (hasPeerDataChannels(dataChannels)) {
      const channelProp = Object.keys(dataChannels[peerId]);
      for (let y = 0; y < channelProp.length; y += 1) {
        const channel = dataChannels[peerId][channelProp[y]];
        const {
          channelName,
          channelType,
          transferId,
          streamId,
        } = channel;
        let peerChannel = null;
        peerChannel = PeerConnection.getDataChannelBuffer(channel);
        peerChannel.channelProp = channelProp[y];
        peerChannel.channelName = channelName;
        peerChannel.channelType = channelType;
        peerChannel.currentTransferId = transferId;
        peerChannel.currentStreamId = streamId;
        peerChannel.readyState = channel.channel
          ? channel.channel.readyState : SkylinkConstants.DATA_CHANNEL_STATE.CREATE_ERROR;

        listOfPeersDataChannels[peerId][channelName] = peerChannel;
      }
    }
  }

  return listOfPeersDataChannels;
};

export default getPeersDataChannels;