media-stream/helpers/stopStream/dispatchOnLocalStreamEnded.js

import { mediaAccessStopped, peerUpdated, streamEnded } from '../../../skylink-events';
import Skylink from '../../../index';
import { dispatchEvent } from '../../../utils/skylinkEventManager';
import { hasVideoTrack, hasAudioTrack } from '../../../utils/helpers';
import logger from '../../../logger';
import MESSAGES from '../../../messages';
import PeerData from '../../../peer-data/index';
import helpers from '../../../peer-data/helpers';
import { TAGS } from '../../../constants';

/**
 * Function that handles the <code>RTCPeerConnection.removeTracks(sender)</code> on the local MediaStream.
 * @param {SkylinkRoom} room
 * @param {MediaStream} stream - The stream.
 * @param {boolean} isScreensharing
 * @memberOf MediaStreamHelpers
 * @fires streamEnded
 */
const dispatchOnLocalStreamEnded = (room, stream, isScreensharing = false) => {
  const state = Skylink.getSkylinkState(room.id);
  const { MEDIA_STREAM } = MESSAGES;
  const { user } = state;
  const isSelf = true;

  logger.log.INFO([user.sid, TAGS.MEDIA_STREAM, null, MEDIA_STREAM.STOP_SETTINGS], {
    peerId: user.sid, isSelf, isScreensharing, stream,
  });

  dispatchEvent(streamEnded({
    room,
    peerId: user.sid,
    peerInfo: PeerData.getCurrentSessionInfo(room),
    isSelf,
    isScreensharing,
    streamId: stream.id,
    isVideo: hasVideoTrack(stream),
    isAudio: hasAudioTrack(stream),
  }));

  dispatchEvent(mediaAccessStopped({
    isScreensharing,
    streamId: stream.id,
  }));

  dispatchEvent(peerUpdated({
    peerId: user.sid,
    peerInfo: helpers.getCurrentSessionInfo(room),
    isSelf: true,
  }));
};

export default dispatchOnLocalStreamEnded;