| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 | 
							- var EventEmitter = require("events");
 - var eventEmitter = new EventEmitter();
 - var CQEvents = require("../../service/connectionquality/CQEvents");
 - var XMPPEvents = require("../../service/xmpp/XMPPEvents");
 - 
 - /**
 -  * local stats
 -  * @type {{}}
 -  */
 - var stats = {};
 - 
 - /**
 -  * remote stats
 -  * @type {{}}
 -  */
 - var remoteStats = {};
 - 
 - /**
 -  * Interval for sending statistics to other participants
 -  * @type {null}
 -  */
 - var sendIntervalId = null;
 - 
 - 
 - /**
 -  * Start statistics sending.
 -  */
 - function startSendingStats() {
 -     sendStats();
 -     sendIntervalId = setInterval(sendStats, 10000);
 - }
 - 
 - /**
 -  * Sends statistics to other participants
 -  */
 - function sendStats() {
 -     APP.xmpp.addToPresence("connectionQuality", convertToMUCStats(stats));
 - }
 - 
 - /**
 -  * Converts statistics to format for sending through XMPP
 -  * @param stats the statistics
 -  * @returns {{bitrate_donwload: *, bitrate_uplpoad: *, packetLoss_total: *, packetLoss_download: *, packetLoss_upload: *}}
 -  */
 - function convertToMUCStats(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
 -     };
 - }
 - 
 - /**
 -  * Converts statitistics 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.xmpp.addListener(XMPPEvents.REMOTE_STATS, this.updateRemoteStats);
 -         APP.statistics.addConnectionStatsListener(this.updateLocalStats);
 -         APP.statistics.addRemoteStatsStopListener(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);
 -         if (sendIntervalId == null) {
 -             startSendingStats();
 -         }
 -     },
 - 
 -     /**
 -      * Updates remote statistics
 -      * @param jid the jid associated with the statistics
 -      * @param data the statistics
 -      */
 -     updateRemoteStats: function (jid, data) {
 -         if (data == null || data.packetLoss_total == null) {
 -             eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, jid, null, null);
 -             return;
 -         }
 -         remoteStats[jid] = parseMUCStats(data);
 - 
 -         eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED,
 -             jid, 100 - data.packetLoss_total, remoteStats[jid]);
 -     },
 - 
 -     /**
 -      * Stops statistics sending.
 -      */
 -     stopSendingStats: function () {
 -         clearInterval(sendIntervalId);
 -         sendIntervalId = null;
 -         //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);
 -     }
 - 
 - };
 - 
 - module.exports = ConnectionQuality;
 
 
  |