| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- /* 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);
 -     }
 - };
 
 
  |