|
|
|
@ -3,7 +3,6 @@ |
|
|
|
|
var EventEmitter = require("events"); |
|
|
|
|
var eventEmitter = new EventEmitter(); |
|
|
|
|
var CQEvents = require("../../service/connectionquality/CQEvents"); |
|
|
|
|
var XMPPEvents = require("../../service/xmpp/XMPPEvents"); |
|
|
|
|
var StatisticsEvents = require("../../service/statistics/Events"); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -18,43 +17,6 @@ var stats = {}; |
|
|
|
|
*/ |
|
|
|
|
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 statistics to format used by VideoLayout |
|
|
|
|
* @param stats |
|
|
|
@ -76,11 +38,12 @@ function parseMUCStats(stats) { |
|
|
|
|
|
|
|
|
|
var ConnectionQuality = { |
|
|
|
|
init: function () { |
|
|
|
|
APP.xmpp.addListener(XMPPEvents.REMOTE_STATS, this.updateRemoteStats); |
|
|
|
|
APP.statistics.addListener(StatisticsEvents.CONNECTION_STATS, |
|
|
|
|
this.updateLocalStats); |
|
|
|
|
APP.statistics.addListener(StatisticsEvents.STOP, |
|
|
|
|
this.stopSendingStats); |
|
|
|
|
APP.statistics.addListener( |
|
|
|
|
StatisticsEvents.CONNECTION_STATS, this.updateLocalStats |
|
|
|
|
); |
|
|
|
|
APP.statistics.addListener( |
|
|
|
|
StatisticsEvents.STOP, this.stopSendingStats |
|
|
|
|
); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -90,33 +53,29 @@ var ConnectionQuality = { |
|
|
|
|
updateLocalStats: function (data) { |
|
|
|
|
stats = data; |
|
|
|
|
eventEmitter.emit(CQEvents.LOCALSTATS_UPDATED, 100 - stats.packetLoss.total, stats); |
|
|
|
|
if (!sendIntervalId) { |
|
|
|
|
startSendingStats(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Updates remote statistics |
|
|
|
|
* @param jid the jid associated with the statistics |
|
|
|
|
* @param id the id associated with the statistics |
|
|
|
|
* @param data the statistics |
|
|
|
|
*/ |
|
|
|
|
updateRemoteStats: function (jid, data) { |
|
|
|
|
updateRemoteStats: function (id, data) { |
|
|
|
|
if (!data || !data.packetLoss_total) { |
|
|
|
|
eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, jid, null, null); |
|
|
|
|
eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, id, null, null); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
remoteStats[jid] = parseMUCStats(data); |
|
|
|
|
remoteStats[id] = parseMUCStats(data); |
|
|
|
|
|
|
|
|
|
eventEmitter.emit(CQEvents.REMOTESTATS_UPDATED, |
|
|
|
|
jid, 100 - data.packetLoss_total, remoteStats[jid]); |
|
|
|
|
eventEmitter.emit( |
|
|
|
|
CQEvents.REMOTESTATS_UPDATED, id, 100 - data.packetLoss_total, remoteStats[id] |
|
|
|
|
); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Stops statistics sending. |
|
|
|
|
*/ |
|
|
|
|
stopSendingStats: function () { |
|
|
|
|
clearInterval(sendIntervalId); |
|
|
|
|
sendIntervalId = null; |
|
|
|
|
//notify UI about stopping statistics gathering
|
|
|
|
|
eventEmitter.emit(CQEvents.STOP); |
|
|
|
|
}, |
|
|
|
@ -127,11 +86,25 @@ var ConnectionQuality = { |
|
|
|
|
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; |