| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | /* global APP, require */
/* jshint -W101 */
var EventEmitter = require("events");
var eventEmitter = new EventEmitter();
var CQEvents = require("../../service/connectionquality/CQEvents");
var StatisticsEvents = require("../../service/statistics/Events");
/**
 * local stats
 * @type {{}}
 */
var stats = {};
/**
 * remote stats
 * @type {{}}
 */
var remoteStats = {};
/**
 * Converts statistics to format used by VideoLayout
 * @param stats
 * @returns {{bitrate: {download: *, upload: *}, packetLoss: {total: *, download: *, upload: *}}}
 */
function parseMUCStats(stats) {
    return {
        bitrate: {
            download: stats.bitrate_download,
            upload: stats.bitrate_upload
        },
        packetLoss: {
            total: stats.packetLoss_total,
            download: stats.packetLoss_download,
            upload: stats.packetLoss_upload
        }
    };
}
var ConnectionQuality = {
    init: function () {
        APP.statistics.addListener(
            StatisticsEvents.CONNECTION_STATS, this.updateLocalStats
        );
        APP.statistics.addListener(
            StatisticsEvents.STOP, this.stopSendingStats
        );
    },
    /**
     * Updates the local statistics
     * @param data new statistics
     */
    updateLocalStats: function (data) {
        stats = data;
        eventEmitter.emit(CQEvents.LOCALSTATS_UPDATED, 100 - stats.packetLoss.total, stats);
    },
    /**
     * Updates remote statistics
     * @param id the id associated with the statistics
     * @param data the statistics
     */
    updateRemoteStats: function (id, data) {
        if (!data || !data.packetLoss_total) {
            eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null);
            return;
        }
        remoteStats[id] = parseMUCStats(data);
        eventEmitter.emit(
            CQEvents.REMOTESTATS_UPDATED, id, 100 - data.packetLoss_total, remoteStats[id]
        );
    },
    /**
     * Stops statistics sending.
     */
    stopSendingStats: function () {
        //notify UI about stopping statistics gathering
        eventEmitter.emit(CQEvents.STOP);
    },
    /**
     * Returns the local statistics.
     */
    getStats: function () {
        return stats;
    },
    addListener: function (type, listener) {
        eventEmitter.on(type, listener);
    },
    /**
     * Converts statistics to format for sending through XMPP
     * @param stats the statistics
     * @returns {{bitrate_donwload: *, bitrate_uplpoad: *, packetLoss_total: *, packetLoss_download: *, packetLoss_upload: *}}
     */
    convertToMUCStats: function (stats) {
        return {
            "bitrate_download": stats.bitrate.download,
            "bitrate_upload": stats.bitrate.upload,
            "packetLoss_total": stats.packetLoss.total,
            "packetLoss_download": stats.packetLoss.download,
            "packetLoss_upload": stats.packetLoss.upload
        };
    }
};
module.exports = ConnectionQuality;
 |