/* global APP, require */ /* jshint -W101 */ import EventEmitter from "events"; import CQEvents from "../../service/connectionquality/CQEvents"; const eventEmitter = new EventEmitter(); /** * local stats * @type {{}} */ var stats = {}; /** * remote stats * @type {{}} */ var remoteStats = {}; /** * Quality percent( 100% - good, 0% - bad.) for the local user. */ var localConnectionQuality = 100; /** * Quality percent( 100% - good, 0% - bad.) stored per id. */ var remoteConnectionQuality = {}; /** * Calculates the quality percent based on passed new and old value. * @param newVal the new value * @param oldVal the old value */ function calculateQuality(newVal, oldVal) { return (newVal <= oldVal) ? newVal : (9*oldVal + newVal) / 10; } export default { /** * Updates the local statistics * @param data new statistics * @param dontUpdateLocalConnectionQuality {boolean} if true - * localConnectionQuality wont be recalculated. */ updateLocalStats: function (data, dontUpdateLocalConnectionQuality) { stats = data; if(!dontUpdateLocalConnectionQuality) { var newVal = 100 - stats.packetLoss.total; localConnectionQuality = calculateQuality(newVal, localConnectionQuality); } eventEmitter.emit(CQEvents.LOCALSTATS_UPDATED, localConnectionQuality, stats); }, /** * Updates only the localConnectionQuality value * @param values {int} the new value. should be from 0 - 100. */ updateLocalConnectionQuality: function (value) { localConnectionQuality = value; eventEmitter.emit(CQEvents.LOCALSTATS_UPDATED, localConnectionQuality, stats); }, /** * Updates remote statistics * @param id the id associated with the statistics * @param data the statistics */ updateRemoteStats: function (id, data) { if (!data || !("packetLoss" in data) || !("total" in data.packetLoss)) { eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null); return; } // Use only the fields we need data = {bitrate: data.bitrate, packetLoss: data.packetLoss}; remoteStats[id] = data; var newVal = 100 - data.packetLoss.total; var oldVal = remoteConnectionQuality[id]; remoteConnectionQuality[id] = calculateQuality(newVal, oldVal || 100); eventEmitter.emit( CQEvents.REMOTESTATS_UPDATED, id, remoteConnectionQuality[id], remoteStats[id]); }, /** * Returns the local statistics. */ getStats: function () { return stats; }, addListener: function (type, listener) { eventEmitter.on(type, listener); } };