var logger = require("jitsi-meet-logger").getLogger(__filename);
var Statistics = require("../statistics/statistics");
/**
* The constant for the name of the focus component.
* @type {string}
*/
ComponentsVersions.FOCUS_COMPONENT = "focus";
/**
* The constant for the name of the videobridge component.
* @type {string}
*/
ComponentsVersions.VIDEOBRIDGE_COMPONENT = "videobridge";
/**
* The contant for the name of the XMPP server component.
* @type {string}
*/
ComponentsVersions.XMPP_SERVER_COMPONENT = "xmpp";
/**
* Creates new instance of ComponentsVersions which will be discovering
* the versions of conferencing system components in given
* JitsiConference.
* @param conference JitsiConference instance which will be used to
* listen for focus presence updates.
* @constructor
*/
function ComponentsVersions(conference) {
this.versions = {};
this.conference = conference;
this.conference.addCommandListener(
'versions', this.processPresence.bind(this));
}
ComponentsVersions.prototype.processPresence =
function(node, mucResource, mucJid) {
if (node.attributes.xmlns !== 'http://jitsi.org/jitmeet') {
logger.warn("Ignored presence versions node - invalid xmlns", node);
return;
}
if (!this.conference._isFocus(mucJid)) {
logger.warn(
"Received versions not from the focus user: " + node, mucJid);
return;
}
var log = "";
node.children.forEach(function(item){
var componentName = item.attributes.name;
if (componentName !== ComponentsVersions.FOCUS_COMPONENT &&
componentName !== ComponentsVersions.XMPP_SERVER_COMPONENT &&
componentName !== ComponentsVersions.VIDEOBRIDGE_COMPONENT) {
logger.warn(
"Received version for not supported component name: "
+ componentName);
return;
}
var version = item.value;
if (this.versions[componentName] !== version) {
if(this.versions[componentName] &&
componentName !== ComponentsVersions.FOCUS_COMPONENT &&
componentName !== ComponentsVersions.VIDEOBRIDGE_COMPONENT) {
//version is changed during the call
this.conference._fireIncompatibleVersionsEvent();
}
this.versions[componentName] = version;
logger.info("Got " + componentName + " version: " + version);
log += (log.length > 0? ", " : "")
+ componentName + ": " + version;
}
}.bind(this));
// logs versions to stats
if (log.length > 0)
Statistics.sendLog(log);
};
/**
* Obtains the version of conferencing system component.
* @param componentName the name of the component for which we want to obtain
* the version.
* @returns {String} which describes the version of the component identified by
* given componentName or undefined if not found.
*/
ComponentsVersions.prototype.getComponentVersion = function(componentName) {
return this.versions[componentName];
};
module.exports = ComponentsVersions;