| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | /* global require, APP */
/**
 * Created by hristo on 8/4/14.
 */
var RTPStats = require("./RTPStatsCollector.js");
var EventEmitter = require("events");
var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
var XMPPEvents = require("../../service/xmpp/XMPPEvents");
var CallStats = require("./CallStats");
var RTCEvents = require("../../service/RTC/RTCEvents");
var StatisticsEvents = require("../../service/statistics/Events");
var eventEmitter = new EventEmitter();
var rtpStats = null;
function stopRemote() {
    if (rtpStats) {
        rtpStats.stop();
        eventEmitter.emit(StatisticsEvents.STOP);
        rtpStats = null;
    }
}
function startRemoteStats (peerconnection) {
    if (rtpStats) {
        rtpStats.stop();
    }
    rtpStats = new RTPStats(peerconnection, 200, 2000, eventEmitter);
    rtpStats.start();
}
function onDisposeConference(onUnload) {
    CallStats.sendTerminateEvent();
    stopRemote();
    if (onUnload) {
        eventEmitter.removeAllListeners();
    }
}
export default {
    /**
     * Indicates that this audio level is for local jid.
     * @type {string}
     */
    LOCAL_JID: 'local',
    addListener: function(type, listener) {
        eventEmitter.on(type, listener);
    },
    removeListener: function (type, listener) {
        eventEmitter.removeListener(type, listener);
    },
    stop: function () {
        stopRemote();
        if (eventEmitter) {
            eventEmitter.removeAllListeners();
        }
    },
    onAudioMute (mute) {
        CallStats.sendMuteEvent(mute, "audio");
    },
    onVideoMute (mute) {
        CallStats.sendMuteEvent(mute, "video");
    },
    onGetUserMediaFailed (e) {
       CallStats.sendGetUserMediaFailed(e);
    },
    start: function () {
        const xmpp = APP.conference._room.xmpp;
        xmpp.addListener(
            XMPPEvents.DISPOSE_CONFERENCE,
            onDisposeConference
        );
        //FIXME: we may want to change CALL INCOMING event to
        // onnegotiationneeded
        xmpp.addListener(XMPPEvents.CALL_INCOMING, function (event) {
            startRemoteStats(event.peerconnection);
            // CallStats.init(event);
        });
        xmpp.addListener(
            XMPPEvents.PEERCONNECTION_READY,
            function (session) {
                CallStats.init(session);
            }
        );
        xmpp.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
            CallStats.sendSetupFailedEvent();
        });
        xmpp.addListener(RTCEvents.CREATE_OFFER_FAILED, function (e, pc) {
            CallStats.sendCreateOfferFailed(e, pc);
        });
        xmpp.addListener(RTCEvents.CREATE_ANSWER_FAILED, function (e, pc) {
            CallStats.sendCreateAnswerFailed(e, pc);
        });
        xmpp.addListener(
            RTCEvents.SET_LOCAL_DESCRIPTION_FAILED,
            function (e, pc) {
                CallStats.sendSetLocalDescFailed(e, pc);
            }
        );
        xmpp.addListener(
            RTCEvents.SET_REMOTE_DESCRIPTION_FAILED,
            function (e, pc) {
                CallStats.sendSetRemoteDescFailed(e, pc);
            }
        );
        xmpp.addListener(
            RTCEvents.ADD_ICE_CANDIDATE_FAILED,
            function (e, pc) {
                CallStats.sendAddIceCandidateFailed(e, pc);
            }
        );
    }
};
 |