Add events for data chanel.
This commit is contained in:
parent
af50bd5b94
commit
bc2d72638b
|
@ -22,17 +22,18 @@
|
||||||
<script src="service/RTC/RTCBrowserType.js?v=1"></script>
|
<script src="service/RTC/RTCBrowserType.js?v=1"></script>
|
||||||
<script src="service/RTC/StreamEventTypes.js?v=2"></script>
|
<script src="service/RTC/StreamEventTypes.js?v=2"></script>
|
||||||
<script src="service/RTC/MediaStreamTypes.js?v=1"></script>
|
<script src="service/RTC/MediaStreamTypes.js?v=1"></script>
|
||||||
|
<script src="service/RTC/RTCEvents.js?v=1"></script>
|
||||||
<script src="service/xmpp/XMPPEvents.js?v=1"></script>
|
<script src="service/xmpp/XMPPEvents.js?v=1"></script>
|
||||||
<script src="service/connectionquality/CQEvents.js?v=1"></script>
|
<script src="service/connectionquality/CQEvents.js?v=1"></script>
|
||||||
<script src="service/UI/UIEvents.js?v=1"></script>
|
<script src="service/UI/UIEvents.js?v=1"></script>
|
||||||
<script src="service/desktopsharing/DesktopSharingEventTypes.js?v=1"></script>
|
<script src="service/desktopsharing/DesktopSharingEventTypes.js?v=1"></script>
|
||||||
<script src="libs/modules/simulcast.bundle.js?v=5"></script>
|
|
||||||
<script src="libs/modules/connectionquality.bundle.js?v=3"></script>
|
<script src="libs/modules/connectionquality.bundle.js?v=3"></script>
|
||||||
<script src="libs/modules/UI.bundle.js?v=12"></script>
|
<script src="libs/modules/UI.bundle.js?v=13"></script>
|
||||||
<script src="libs/modules/statistics.bundle.js?v=5"></script>
|
<script src="libs/modules/statistics.bundle.js?v=5"></script>
|
||||||
<script src="libs/modules/RTC.bundle.js?v=7"></script>
|
<script src="libs/modules/RTC.bundle.js?v=8"></script>
|
||||||
|
<script src="libs/modules/simulcast.bundle.js?v=6"></script>
|
||||||
<script src="libs/modules/desktopsharing.bundle.js?v=3"></script><!-- desktop sharing -->
|
<script src="libs/modules/desktopsharing.bundle.js?v=3"></script><!-- desktop sharing -->
|
||||||
<script src="libs/modules/xmpp.bundle.js?v=7"></script>
|
<script src="libs/modules/xmpp.bundle.js?v=8"></script>
|
||||||
<script src="libs/modules/keyboardshortcut.bundle.js?v=2"></script>
|
<script src="libs/modules/keyboardshortcut.bundle.js?v=2"></script>
|
||||||
<script src="app.js?v=30"></script><!-- application logic -->
|
<script src="app.js?v=30"></script><!-- application logic -->
|
||||||
<script src="libs/modules/API.bundle.js?v=2"></script>
|
<script src="libs/modules/API.bundle.js?v=2"></script>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// cache datachannels to avoid garbage collection
|
// cache datachannels to avoid garbage collection
|
||||||
// https://code.google.com/p/chromium/issues/detail?id=405545
|
// https://code.google.com/p/chromium/issues/detail?id=405545
|
||||||
var _dataChannels = [];
|
var _dataChannels = [];
|
||||||
|
var eventEmitter = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,9 +68,7 @@ var DataChannels =
|
||||||
console.info(
|
console.info(
|
||||||
"Data channel new dominant speaker event: ",
|
"Data channel new dominant speaker event: ",
|
||||||
dominantSpeakerEndpoint);
|
dominantSpeakerEndpoint);
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTC.DOMINANTSPEAKER_CHANGED, dominantSpeakerEndpoint);
|
||||||
'dominantspeakerchanged',
|
|
||||||
[dominantSpeakerEndpoint]);
|
|
||||||
}
|
}
|
||||||
else if ("InLastNChangeEvent" === colibriClass)
|
else if ("InLastNChangeEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +91,8 @@ var DataChannels =
|
||||||
newValue = new Boolean(newValue).valueOf();
|
newValue = new Boolean(newValue).valueOf();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UI.onLastNChanged(oldValue, newValue);
|
|
||||||
|
eventEmitter.emit(RTCEvents.LASTN_CHANGED, oldValue, newValue);
|
||||||
}
|
}
|
||||||
else if ("LastNEndpointsChangeEvent" === colibriClass)
|
else if ("LastNEndpointsChangeEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
|
@ -107,29 +107,26 @@ var DataChannels =
|
||||||
console.log(
|
console.log(
|
||||||
"Data channel new last-n event: ",
|
"Data channel new last-n event: ",
|
||||||
lastNEndpoints, endpointsEnteringLastN, obj);
|
lastNEndpoints, endpointsEnteringLastN, obj);
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
||||||
'lastnchanged',
|
lastNEndpoints, endpointsEnteringLastN, obj);
|
||||||
[lastNEndpoints, endpointsEnteringLastN, stream]);
|
|
||||||
}
|
}
|
||||||
else if ("SimulcastLayersChangedEvent" === colibriClass)
|
else if ("SimulcastLayersChangedEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
'simulcastlayerschanged',
|
obj.endpointSimulcastLayers);
|
||||||
[obj.endpointSimulcastLayers]);
|
|
||||||
}
|
}
|
||||||
else if ("SimulcastLayersChangingEvent" === colibriClass)
|
else if ("SimulcastLayersChangingEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.SIMULCAST_LAYER_CHANGING,
|
||||||
'simulcastlayerschanging',
|
obj.endpointSimulcastLayers);
|
||||||
[obj.endpointSimulcastLayers]);
|
|
||||||
}
|
}
|
||||||
else if ("StartSimulcastLayerEvent" === colibriClass)
|
else if ("StartSimulcastLayerEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger('startsimulcastlayer', obj.simulcastLayer);
|
eventEmitter.emit(RTCEvents.SIMULCAST_START, obj.simulcastLayer);
|
||||||
}
|
}
|
||||||
else if ("StopSimulcastLayerEvent" === colibriClass)
|
else if ("StopSimulcastLayerEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger('stopsimulcastlayer', obj.simulcastLayer);
|
eventEmitter.emit(RTCEvents.SIMULCAST_STOP, obj.simulcastLayer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -152,11 +149,12 @@ var DataChannels =
|
||||||
* Binds "ondatachannel" event listener to given PeerConnection instance.
|
* Binds "ondatachannel" event listener to given PeerConnection instance.
|
||||||
* @param peerConnection WebRTC peer connection instance.
|
* @param peerConnection WebRTC peer connection instance.
|
||||||
*/
|
*/
|
||||||
bindDataChannelListener: function (peerConnection) {
|
init: function (peerConnection, emitter) {
|
||||||
if(!config.openSctp)
|
if(!config.openSctp)
|
||||||
retrun;
|
retrun;
|
||||||
|
|
||||||
peerConnection.ondatachannel = this.onDataChannel;
|
peerConnection.ondatachannel = this.onDataChannel;
|
||||||
|
eventEmitter = emitter;
|
||||||
|
|
||||||
// Sample code for opening new data channel from Jitsi Meet to the bridge.
|
// Sample code for opening new data channel from Jitsi Meet to the bridge.
|
||||||
// Although it's not a requirement to open separate channels from both bridge
|
// Although it's not a requirement to open separate channels from both bridge
|
||||||
|
@ -407,6 +405,9 @@ var RTC = {
|
||||||
addStreamListener: function (listener, eventType) {
|
addStreamListener: function (listener, eventType) {
|
||||||
eventEmitter.on(eventType, listener);
|
eventEmitter.on(eventType, listener);
|
||||||
},
|
},
|
||||||
|
addListener: function (type, listener) {
|
||||||
|
eventEmitter.on(type, listener);
|
||||||
|
},
|
||||||
removeStreamListener: function (listener, eventType) {
|
removeStreamListener: function (listener, eventType) {
|
||||||
if(!(eventType instanceof StreamEventTypes))
|
if(!(eventType instanceof StreamEventTypes))
|
||||||
throw "Illegal argument";
|
throw "Illegal argument";
|
||||||
|
@ -510,7 +511,7 @@ var RTC = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
xmpp.addListener(XMPPEvents.CALL_INCOMING, function(event) {
|
xmpp.addListener(XMPPEvents.CALL_INCOMING, function(event) {
|
||||||
DataChannels.bindDataChannelListener(event.peerconnection);
|
DataChannels.init(event.peerconnection, eventEmitter);
|
||||||
});
|
});
|
||||||
this.rtcUtils = new RTCUtils(this);
|
this.rtcUtils = new RTCUtils(this);
|
||||||
this.rtcUtils.obtainAudioAndVideoPermissions();
|
this.rtcUtils.obtainAudioAndVideoPermissions();
|
||||||
|
|
|
@ -80,7 +80,23 @@ function registerListeners() {
|
||||||
RTC.addStreamListener(function (stream) {
|
RTC.addStreamListener(function (stream) {
|
||||||
VideoLayout.onRemoteStreamAdded(stream);
|
VideoLayout.onRemoteStreamAdded(stream);
|
||||||
}, StreamEventTypes.EVENT_TYPE_REMOTE_CREATED);
|
}, StreamEventTypes.EVENT_TYPE_REMOTE_CREATED);
|
||||||
|
RTC.addListener(RTCEvents.LASTN_CHANGED, onLastNChanged);
|
||||||
|
RTC.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED, function (resourceJid) {
|
||||||
|
VideoLayout.onDominantSpeakerChanged(resourceJid);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
||||||
|
function (lastNEndpoints, endpointsEnteringLastN, stream) {
|
||||||
|
VideoLayout.onLastNEndpointsChanged(lastNEndpoints,
|
||||||
|
endpointsEnteringLastN, stream);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
VideoLayout.onSimulcastLayersChanged(endpointSimulcastLayers);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGING,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
VideoLayout.onSimulcastLayersChanging(endpointSimulcastLayers);
|
||||||
|
});
|
||||||
VideoLayout.init();
|
VideoLayout.init();
|
||||||
|
|
||||||
statistics.addAudioLevelListener(function(jid, audioLevel)
|
statistics.addAudioLevelListener(function(jid, audioLevel)
|
||||||
|
@ -156,6 +172,9 @@ function registerListeners() {
|
||||||
VideoLayout.updateConnectionStats);
|
VideoLayout.updateConnectionStats);
|
||||||
connectionquality.addListener(CQEvents.STOP,
|
connectionquality.addListener(CQEvents.STOP,
|
||||||
VideoLayout.onStatsStop);
|
VideoLayout.onStatsStop);
|
||||||
|
xmpp.addListener(XMPPEvents.AUTHENTICATION_REQUIRED, onAuthenticationRequired);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function bindEvents()
|
function bindEvents()
|
||||||
|
@ -368,21 +387,6 @@ function onMucLeft(jid) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
UI.getSettings = function () {
|
|
||||||
return Settings.getSettings();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleFilmStrip = function () {
|
|
||||||
return BottomToolbar.toggleFilmStrip();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleChat = function () {
|
|
||||||
return BottomToolbar.toggleChat();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleContactList = function () {
|
|
||||||
return BottomToolbar.toggleContactList();
|
|
||||||
};
|
|
||||||
|
|
||||||
function onLocalRoleChange(jid, info, pres, isModerator, isExternalAuthEnabled)
|
function onLocalRoleChange(jid, info, pres, isModerator, isExternalAuthEnabled)
|
||||||
{
|
{
|
||||||
|
@ -468,13 +472,36 @@ function onMucRoleChanged(role, displayName) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.onAuthenticationRequired = function (intervalCallback) {
|
function onAuthenticationRequired(intervalCallback) {
|
||||||
Authentication.openAuthenticationDialog(
|
Authentication.openAuthenticationDialog(
|
||||||
roomName, intervalCallback, function () {
|
roomName, intervalCallback, function () {
|
||||||
Toolbar.authenticateClicked();
|
Toolbar.authenticateClicked();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function onLastNChanged(oldValue, newValue) {
|
||||||
|
if (config.muteLocalVideoIfNotInLastN) {
|
||||||
|
setVideoMute(!newValue, { 'byUser': false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UI.getSettings = function () {
|
||||||
|
return Settings.getSettings();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleFilmStrip = function () {
|
||||||
|
return BottomToolbar.toggleFilmStrip();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleChat = function () {
|
||||||
|
return BottomToolbar.toggleChat();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleContactList = function () {
|
||||||
|
return BottomToolbar.toggleContactList();
|
||||||
|
};
|
||||||
|
|
||||||
UI.setRecordingButtonState = function (state) {
|
UI.setRecordingButtonState = function (state) {
|
||||||
Toolbar.setRecordingButtonState(state);
|
Toolbar.setRecordingButtonState(state);
|
||||||
};
|
};
|
||||||
|
@ -677,12 +704,6 @@ UI.setAudioMuted = function (mute) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.onLastNChanged = function (oldValue, newValue) {
|
|
||||||
if (config.muteLocalVideoIfNotInLastN) {
|
|
||||||
setVideoMute(!newValue, { 'byUser': false });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UI.addListener = function (type, listener) {
|
UI.addListener = function (type, listener) {
|
||||||
eventEmitter.on(type, listener);
|
eventEmitter.on(type, listener);
|
||||||
}
|
}
|
||||||
|
@ -4805,8 +4826,6 @@ var currentVideoHeight = null;
|
||||||
|
|
||||||
var localVideoSrc = null;
|
var localVideoSrc = null;
|
||||||
|
|
||||||
var defaultLocalDisplayName = "Me";
|
|
||||||
|
|
||||||
function videoactive( videoelem) {
|
function videoactive( videoelem) {
|
||||||
if (videoelem.attr('id').indexOf('mixedmslabel') === -1) {
|
if (videoelem.attr('id').indexOf('mixedmslabel') === -1) {
|
||||||
// ignore mixedmslabela0 and v0
|
// ignore mixedmslabela0 and v0
|
||||||
|
@ -6542,7 +6561,7 @@ var VideoLayout = (function (my) {
|
||||||
/**
|
/**
|
||||||
* On dominant speaker changed event.
|
* On dominant speaker changed event.
|
||||||
*/
|
*/
|
||||||
$(document).bind('dominantspeakerchanged', function (event, resourceJid) {
|
my.onDominantSpeakerChanged = function (resourceJid) {
|
||||||
// We ignore local user events.
|
// We ignore local user events.
|
||||||
if (resourceJid
|
if (resourceJid
|
||||||
=== xmpp.myResource())
|
=== xmpp.myResource())
|
||||||
|
@ -6581,18 +6600,16 @@ var VideoLayout = (function (my) {
|
||||||
if (video.length && video[0].currentTime > 0)
|
if (video.length && video[0].currentTime > 0)
|
||||||
VideoLayout.updateLargeVideo(RTC.getVideoSrc(video[0]), resourceJid);
|
VideoLayout.updateLargeVideo(RTC.getVideoSrc(video[0]), resourceJid);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On last N change event.
|
* On last N change event.
|
||||||
*
|
*
|
||||||
* @param event the event that notified us
|
|
||||||
* @param lastNEndpoints the list of last N endpoints
|
* @param lastNEndpoints the list of last N endpoints
|
||||||
* @param endpointsEnteringLastN the list currently entering last N
|
* @param endpointsEnteringLastN the list currently entering last N
|
||||||
* endpoints
|
* endpoints
|
||||||
*/
|
*/
|
||||||
$(document).bind('lastnchanged', function ( event,
|
my.onLastNEndpointsChanged = function ( lastNEndpoints,
|
||||||
lastNEndpoints,
|
|
||||||
endpointsEnteringLastN,
|
endpointsEnteringLastN,
|
||||||
stream) {
|
stream) {
|
||||||
if (lastNCount !== lastNEndpoints.length)
|
if (lastNCount !== lastNEndpoints.length)
|
||||||
|
@ -6731,9 +6748,9 @@ var VideoLayout = (function (my) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
$(document).bind('simulcastlayerschanging', function (event, endpointSimulcastLayers) {
|
my.onSimulcastLayersChanging = function (endpointSimulcastLayers) {
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
|
||||||
var resource = esl.endpoint;
|
var resource = esl.endpoint;
|
||||||
|
@ -6782,12 +6799,12 @@ var VideoLayout = (function (my) {
|
||||||
console.error('Could not find a stream or a session.', sid, electedStream);
|
console.error('Could not find a stream or a session.', sid, electedStream);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On simulcast layers changed event.
|
* On simulcast layers changed event.
|
||||||
*/
|
*/
|
||||||
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers) {
|
my.onSimulcastLayersChanged = function (endpointSimulcastLayers) {
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
|
||||||
var resource = esl.endpoint;
|
var resource = esl.endpoint;
|
||||||
|
@ -6873,7 +6890,7 @@ var VideoLayout = (function (my) {
|
||||||
console.error('Could not find a stream or a sid.', sid, electedStream);
|
console.error('Could not find a stream or a sid.', sid, electedStream);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates local stats
|
* Updates local stats
|
||||||
|
|
|
@ -1103,6 +1103,22 @@ function SimulcastManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
var ssrc = esl.simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setReceivingVideoStream(esl.endpoint, ssrc);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_START, function (simulcastLayer) {
|
||||||
|
var ssrc = simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setLocalVideoStreamEnabled(ssrc, true);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_STOP, function (simulcastLayer) {
|
||||||
|
var ssrc = simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setLocalVideoStreamEnabled(ssrc, false);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1237,24 +1253,6 @@ SimulcastManager.prototype.resetSender = function() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers) {
|
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
|
||||||
var ssrc = esl.simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setReceivingVideoStream(esl.endpoint, ssrc);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).bind('startsimulcastlayer', function (event, simulcastLayer) {
|
|
||||||
var ssrc = simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setLocalVideoStreamEnabled(ssrc, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).bind('stopsimulcastlayer', function (event, simulcastLayer) {
|
|
||||||
var ssrc = simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setLocalVideoStreamEnabled(ssrc, false);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
var simulcast = new SimulcastManager();
|
var simulcast = new SimulcastManager();
|
||||||
|
|
||||||
module.exports = simulcast;
|
module.exports = simulcast;
|
||||||
|
|
|
@ -2831,6 +2831,8 @@ var externalAuthEnabled = false;
|
||||||
// service discovery.
|
// service discovery.
|
||||||
var sipGatewayEnabled = config.hosts.call_control !== undefined;
|
var sipGatewayEnabled = config.hosts.call_control !== undefined;
|
||||||
|
|
||||||
|
var eventEmitter = null;
|
||||||
|
|
||||||
var Moderator = {
|
var Moderator = {
|
||||||
isModerator: function () {
|
isModerator: function () {
|
||||||
return connection && connection.emuc.isModerator();
|
return connection && connection.emuc.isModerator();
|
||||||
|
@ -2853,8 +2855,9 @@ var Moderator = {
|
||||||
connection = con;
|
connection = con;
|
||||||
},
|
},
|
||||||
|
|
||||||
init: function (xmpp) {
|
init: function (xmpp, emitter) {
|
||||||
this.xmppService = xmpp;
|
this.xmppService = xmpp;
|
||||||
|
eventEmitter = emitter;
|
||||||
},
|
},
|
||||||
|
|
||||||
onMucLeft: function (jid) {
|
onMucLeft: function (jid) {
|
||||||
|
@ -3013,11 +3016,13 @@ var Moderator = {
|
||||||
|
|
||||||
self.xmppService.promptLogin();
|
self.xmppService.promptLogin();
|
||||||
} else {
|
} else {
|
||||||
// External authentication mode
|
|
||||||
UI.onAuthenticationRequired(function () {
|
eventEmitter.emit(XMPPEvents.AUTHENTICATION_REQUIRED, // External authentication mode
|
||||||
|
function () {
|
||||||
Moderator.allocateConferenceFocus(
|
Moderator.allocateConferenceFocus(
|
||||||
roomName, callback);
|
roomName, callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// cache datachannels to avoid garbage collection
|
// cache datachannels to avoid garbage collection
|
||||||
// https://code.google.com/p/chromium/issues/detail?id=405545
|
// https://code.google.com/p/chromium/issues/detail?id=405545
|
||||||
var _dataChannels = [];
|
var _dataChannels = [];
|
||||||
|
var eventEmitter = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,9 +67,7 @@ var DataChannels =
|
||||||
console.info(
|
console.info(
|
||||||
"Data channel new dominant speaker event: ",
|
"Data channel new dominant speaker event: ",
|
||||||
dominantSpeakerEndpoint);
|
dominantSpeakerEndpoint);
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTC.DOMINANTSPEAKER_CHANGED, dominantSpeakerEndpoint);
|
||||||
'dominantspeakerchanged',
|
|
||||||
[dominantSpeakerEndpoint]);
|
|
||||||
}
|
}
|
||||||
else if ("InLastNChangeEvent" === colibriClass)
|
else if ("InLastNChangeEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
|
@ -91,7 +90,8 @@ var DataChannels =
|
||||||
newValue = new Boolean(newValue).valueOf();
|
newValue = new Boolean(newValue).valueOf();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UI.onLastNChanged(oldValue, newValue);
|
|
||||||
|
eventEmitter.emit(RTCEvents.LASTN_CHANGED, oldValue, newValue);
|
||||||
}
|
}
|
||||||
else if ("LastNEndpointsChangeEvent" === colibriClass)
|
else if ("LastNEndpointsChangeEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
|
@ -106,29 +106,26 @@ var DataChannels =
|
||||||
console.log(
|
console.log(
|
||||||
"Data channel new last-n event: ",
|
"Data channel new last-n event: ",
|
||||||
lastNEndpoints, endpointsEnteringLastN, obj);
|
lastNEndpoints, endpointsEnteringLastN, obj);
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
||||||
'lastnchanged',
|
lastNEndpoints, endpointsEnteringLastN, obj);
|
||||||
[lastNEndpoints, endpointsEnteringLastN, stream]);
|
|
||||||
}
|
}
|
||||||
else if ("SimulcastLayersChangedEvent" === colibriClass)
|
else if ("SimulcastLayersChangedEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
'simulcastlayerschanged',
|
obj.endpointSimulcastLayers);
|
||||||
[obj.endpointSimulcastLayers]);
|
|
||||||
}
|
}
|
||||||
else if ("SimulcastLayersChangingEvent" === colibriClass)
|
else if ("SimulcastLayersChangingEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger(
|
eventEmitter.emit(RTCEvents.SIMULCAST_LAYER_CHANGING,
|
||||||
'simulcastlayerschanging',
|
obj.endpointSimulcastLayers);
|
||||||
[obj.endpointSimulcastLayers]);
|
|
||||||
}
|
}
|
||||||
else if ("StartSimulcastLayerEvent" === colibriClass)
|
else if ("StartSimulcastLayerEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger('startsimulcastlayer', obj.simulcastLayer);
|
eventEmitter.emit(RTCEvents.SIMULCAST_START, obj.simulcastLayer);
|
||||||
}
|
}
|
||||||
else if ("StopSimulcastLayerEvent" === colibriClass)
|
else if ("StopSimulcastLayerEvent" === colibriClass)
|
||||||
{
|
{
|
||||||
$(document).trigger('stopsimulcastlayer', obj.simulcastLayer);
|
eventEmitter.emit(RTCEvents.SIMULCAST_STOP, obj.simulcastLayer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -151,11 +148,12 @@ var DataChannels =
|
||||||
* Binds "ondatachannel" event listener to given PeerConnection instance.
|
* Binds "ondatachannel" event listener to given PeerConnection instance.
|
||||||
* @param peerConnection WebRTC peer connection instance.
|
* @param peerConnection WebRTC peer connection instance.
|
||||||
*/
|
*/
|
||||||
bindDataChannelListener: function (peerConnection) {
|
init: function (peerConnection, emitter) {
|
||||||
if(!config.openSctp)
|
if(!config.openSctp)
|
||||||
retrun;
|
retrun;
|
||||||
|
|
||||||
peerConnection.ondatachannel = this.onDataChannel;
|
peerConnection.ondatachannel = this.onDataChannel;
|
||||||
|
eventEmitter = emitter;
|
||||||
|
|
||||||
// Sample code for opening new data channel from Jitsi Meet to the bridge.
|
// Sample code for opening new data channel from Jitsi Meet to the bridge.
|
||||||
// Although it's not a requirement to open separate channels from both bridge
|
// Although it's not a requirement to open separate channels from both bridge
|
||||||
|
|
|
@ -18,6 +18,9 @@ var RTC = {
|
||||||
addStreamListener: function (listener, eventType) {
|
addStreamListener: function (listener, eventType) {
|
||||||
eventEmitter.on(eventType, listener);
|
eventEmitter.on(eventType, listener);
|
||||||
},
|
},
|
||||||
|
addListener: function (type, listener) {
|
||||||
|
eventEmitter.on(type, listener);
|
||||||
|
},
|
||||||
removeStreamListener: function (listener, eventType) {
|
removeStreamListener: function (listener, eventType) {
|
||||||
if(!(eventType instanceof StreamEventTypes))
|
if(!(eventType instanceof StreamEventTypes))
|
||||||
throw "Illegal argument";
|
throw "Illegal argument";
|
||||||
|
@ -121,7 +124,7 @@ var RTC = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
xmpp.addListener(XMPPEvents.CALL_INCOMING, function(event) {
|
xmpp.addListener(XMPPEvents.CALL_INCOMING, function(event) {
|
||||||
DataChannels.bindDataChannelListener(event.peerconnection);
|
DataChannels.init(event.peerconnection, eventEmitter);
|
||||||
});
|
});
|
||||||
this.rtcUtils = new RTCUtils(this);
|
this.rtcUtils = new RTCUtils(this);
|
||||||
this.rtcUtils.obtainAudioAndVideoPermissions();
|
this.rtcUtils.obtainAudioAndVideoPermissions();
|
||||||
|
|
|
@ -79,7 +79,23 @@ function registerListeners() {
|
||||||
RTC.addStreamListener(function (stream) {
|
RTC.addStreamListener(function (stream) {
|
||||||
VideoLayout.onRemoteStreamAdded(stream);
|
VideoLayout.onRemoteStreamAdded(stream);
|
||||||
}, StreamEventTypes.EVENT_TYPE_REMOTE_CREATED);
|
}, StreamEventTypes.EVENT_TYPE_REMOTE_CREATED);
|
||||||
|
RTC.addListener(RTCEvents.LASTN_CHANGED, onLastNChanged);
|
||||||
|
RTC.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED, function (resourceJid) {
|
||||||
|
VideoLayout.onDominantSpeakerChanged(resourceJid);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
||||||
|
function (lastNEndpoints, endpointsEnteringLastN, stream) {
|
||||||
|
VideoLayout.onLastNEndpointsChanged(lastNEndpoints,
|
||||||
|
endpointsEnteringLastN, stream);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
VideoLayout.onSimulcastLayersChanged(endpointSimulcastLayers);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGING,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
VideoLayout.onSimulcastLayersChanging(endpointSimulcastLayers);
|
||||||
|
});
|
||||||
VideoLayout.init();
|
VideoLayout.init();
|
||||||
|
|
||||||
statistics.addAudioLevelListener(function(jid, audioLevel)
|
statistics.addAudioLevelListener(function(jid, audioLevel)
|
||||||
|
@ -155,6 +171,9 @@ function registerListeners() {
|
||||||
VideoLayout.updateConnectionStats);
|
VideoLayout.updateConnectionStats);
|
||||||
connectionquality.addListener(CQEvents.STOP,
|
connectionquality.addListener(CQEvents.STOP,
|
||||||
VideoLayout.onStatsStop);
|
VideoLayout.onStatsStop);
|
||||||
|
xmpp.addListener(XMPPEvents.AUTHENTICATION_REQUIRED, onAuthenticationRequired);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function bindEvents()
|
function bindEvents()
|
||||||
|
@ -367,21 +386,6 @@ function onMucLeft(jid) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
UI.getSettings = function () {
|
|
||||||
return Settings.getSettings();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleFilmStrip = function () {
|
|
||||||
return BottomToolbar.toggleFilmStrip();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleChat = function () {
|
|
||||||
return BottomToolbar.toggleChat();
|
|
||||||
};
|
|
||||||
|
|
||||||
UI.toggleContactList = function () {
|
|
||||||
return BottomToolbar.toggleContactList();
|
|
||||||
};
|
|
||||||
|
|
||||||
function onLocalRoleChange(jid, info, pres, isModerator, isExternalAuthEnabled)
|
function onLocalRoleChange(jid, info, pres, isModerator, isExternalAuthEnabled)
|
||||||
{
|
{
|
||||||
|
@ -467,13 +471,36 @@ function onMucRoleChanged(role, displayName) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.onAuthenticationRequired = function (intervalCallback) {
|
function onAuthenticationRequired(intervalCallback) {
|
||||||
Authentication.openAuthenticationDialog(
|
Authentication.openAuthenticationDialog(
|
||||||
roomName, intervalCallback, function () {
|
roomName, intervalCallback, function () {
|
||||||
Toolbar.authenticateClicked();
|
Toolbar.authenticateClicked();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function onLastNChanged(oldValue, newValue) {
|
||||||
|
if (config.muteLocalVideoIfNotInLastN) {
|
||||||
|
setVideoMute(!newValue, { 'byUser': false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UI.getSettings = function () {
|
||||||
|
return Settings.getSettings();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleFilmStrip = function () {
|
||||||
|
return BottomToolbar.toggleFilmStrip();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleChat = function () {
|
||||||
|
return BottomToolbar.toggleChat();
|
||||||
|
};
|
||||||
|
|
||||||
|
UI.toggleContactList = function () {
|
||||||
|
return BottomToolbar.toggleContactList();
|
||||||
|
};
|
||||||
|
|
||||||
UI.setRecordingButtonState = function (state) {
|
UI.setRecordingButtonState = function (state) {
|
||||||
Toolbar.setRecordingButtonState(state);
|
Toolbar.setRecordingButtonState(state);
|
||||||
};
|
};
|
||||||
|
@ -676,12 +703,6 @@ UI.setAudioMuted = function (mute) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.onLastNChanged = function (oldValue, newValue) {
|
|
||||||
if (config.muteLocalVideoIfNotInLastN) {
|
|
||||||
setVideoMute(!newValue, { 'byUser': false });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UI.addListener = function (type, listener) {
|
UI.addListener = function (type, listener) {
|
||||||
eventEmitter.on(type, listener);
|
eventEmitter.on(type, listener);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,6 @@ var currentVideoHeight = null;
|
||||||
|
|
||||||
var localVideoSrc = null;
|
var localVideoSrc = null;
|
||||||
|
|
||||||
var defaultLocalDisplayName = "Me";
|
|
||||||
|
|
||||||
function videoactive( videoelem) {
|
function videoactive( videoelem) {
|
||||||
if (videoelem.attr('id').indexOf('mixedmslabel') === -1) {
|
if (videoelem.attr('id').indexOf('mixedmslabel') === -1) {
|
||||||
// ignore mixedmslabela0 and v0
|
// ignore mixedmslabela0 and v0
|
||||||
|
@ -1773,7 +1771,7 @@ var VideoLayout = (function (my) {
|
||||||
/**
|
/**
|
||||||
* On dominant speaker changed event.
|
* On dominant speaker changed event.
|
||||||
*/
|
*/
|
||||||
$(document).bind('dominantspeakerchanged', function (event, resourceJid) {
|
my.onDominantSpeakerChanged = function (resourceJid) {
|
||||||
// We ignore local user events.
|
// We ignore local user events.
|
||||||
if (resourceJid
|
if (resourceJid
|
||||||
=== xmpp.myResource())
|
=== xmpp.myResource())
|
||||||
|
@ -1812,18 +1810,16 @@ var VideoLayout = (function (my) {
|
||||||
if (video.length && video[0].currentTime > 0)
|
if (video.length && video[0].currentTime > 0)
|
||||||
VideoLayout.updateLargeVideo(RTC.getVideoSrc(video[0]), resourceJid);
|
VideoLayout.updateLargeVideo(RTC.getVideoSrc(video[0]), resourceJid);
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On last N change event.
|
* On last N change event.
|
||||||
*
|
*
|
||||||
* @param event the event that notified us
|
|
||||||
* @param lastNEndpoints the list of last N endpoints
|
* @param lastNEndpoints the list of last N endpoints
|
||||||
* @param endpointsEnteringLastN the list currently entering last N
|
* @param endpointsEnteringLastN the list currently entering last N
|
||||||
* endpoints
|
* endpoints
|
||||||
*/
|
*/
|
||||||
$(document).bind('lastnchanged', function ( event,
|
my.onLastNEndpointsChanged = function ( lastNEndpoints,
|
||||||
lastNEndpoints,
|
|
||||||
endpointsEnteringLastN,
|
endpointsEnteringLastN,
|
||||||
stream) {
|
stream) {
|
||||||
if (lastNCount !== lastNEndpoints.length)
|
if (lastNCount !== lastNEndpoints.length)
|
||||||
|
@ -1962,9 +1958,9 @@ var VideoLayout = (function (my) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
$(document).bind('simulcastlayerschanging', function (event, endpointSimulcastLayers) {
|
my.onSimulcastLayersChanging = function (endpointSimulcastLayers) {
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
|
||||||
var resource = esl.endpoint;
|
var resource = esl.endpoint;
|
||||||
|
@ -1992,8 +1988,6 @@ var VideoLayout = (function (my) {
|
||||||
|
|
||||||
console.info([esl, primarySSRC, msid, sid, electedStream]);
|
console.info([esl, primarySSRC, msid, sid, electedStream]);
|
||||||
|
|
||||||
var msidParts = msid.split(' ');
|
|
||||||
|
|
||||||
var preload = (Strophe.getResourceFromJid(xmpp.getJidFromSSRC(primarySSRC)) == largeVideoState.userResourceJid);
|
var preload = (Strophe.getResourceFromJid(xmpp.getJidFromSSRC(primarySSRC)) == largeVideoState.userResourceJid);
|
||||||
|
|
||||||
if (preload) {
|
if (preload) {
|
||||||
|
@ -2013,12 +2007,12 @@ var VideoLayout = (function (my) {
|
||||||
console.error('Could not find a stream or a session.', sid, electedStream);
|
console.error('Could not find a stream or a session.', sid, electedStream);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On simulcast layers changed event.
|
* On simulcast layers changed event.
|
||||||
*/
|
*/
|
||||||
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers) {
|
my.onSimulcastLayersChanged = function (endpointSimulcastLayers) {
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
|
||||||
var resource = esl.endpoint;
|
var resource = esl.endpoint;
|
||||||
|
@ -2104,7 +2098,7 @@ var VideoLayout = (function (my) {
|
||||||
console.error('Could not find a stream or a sid.', sid, electedStream);
|
console.error('Could not find a stream or a sid.', sid, electedStream);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates local stats
|
* Updates local stats
|
||||||
|
|
|
@ -46,6 +46,22 @@ function SimulcastManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_LAYER_CHANGED,
|
||||||
|
function (endpointSimulcastLayers) {
|
||||||
|
endpointSimulcastLayers.forEach(function (esl) {
|
||||||
|
var ssrc = esl.simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setReceivingVideoStream(esl.endpoint, ssrc);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_START, function (simulcastLayer) {
|
||||||
|
var ssrc = simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setLocalVideoStreamEnabled(ssrc, true);
|
||||||
|
});
|
||||||
|
RTC.addListener(RTCEvents.SIMULCAST_STOP, function (simulcastLayer) {
|
||||||
|
var ssrc = simulcastLayer.primarySSRC;
|
||||||
|
simulcast._setLocalVideoStreamEnabled(ssrc, false);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -180,24 +196,6 @@ SimulcastManager.prototype.resetSender = function() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers) {
|
|
||||||
endpointSimulcastLayers.forEach(function (esl) {
|
|
||||||
var ssrc = esl.simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setReceivingVideoStream(esl.endpoint, ssrc);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).bind('startsimulcastlayer', function (event, simulcastLayer) {
|
|
||||||
var ssrc = simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setLocalVideoStreamEnabled(ssrc, true);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).bind('stopsimulcastlayer', function (event, simulcastLayer) {
|
|
||||||
var ssrc = simulcastLayer.primarySSRC;
|
|
||||||
simulcast._setLocalVideoStreamEnabled(ssrc, false);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
var simulcast = new SimulcastManager();
|
var simulcast = new SimulcastManager();
|
||||||
|
|
||||||
module.exports = simulcast;
|
module.exports = simulcast;
|
|
@ -30,6 +30,8 @@ var externalAuthEnabled = false;
|
||||||
// service discovery.
|
// service discovery.
|
||||||
var sipGatewayEnabled = config.hosts.call_control !== undefined;
|
var sipGatewayEnabled = config.hosts.call_control !== undefined;
|
||||||
|
|
||||||
|
var eventEmitter = null;
|
||||||
|
|
||||||
var Moderator = {
|
var Moderator = {
|
||||||
isModerator: function () {
|
isModerator: function () {
|
||||||
return connection && connection.emuc.isModerator();
|
return connection && connection.emuc.isModerator();
|
||||||
|
@ -52,8 +54,9 @@ var Moderator = {
|
||||||
connection = con;
|
connection = con;
|
||||||
},
|
},
|
||||||
|
|
||||||
init: function (xmpp) {
|
init: function (xmpp, emitter) {
|
||||||
this.xmppService = xmpp;
|
this.xmppService = xmpp;
|
||||||
|
eventEmitter = emitter;
|
||||||
},
|
},
|
||||||
|
|
||||||
onMucLeft: function (jid) {
|
onMucLeft: function (jid) {
|
||||||
|
@ -212,11 +215,13 @@ var Moderator = {
|
||||||
|
|
||||||
self.xmppService.promptLogin();
|
self.xmppService.promptLogin();
|
||||||
} else {
|
} else {
|
||||||
// External authentication mode
|
|
||||||
UI.onAuthenticationRequired(function () {
|
eventEmitter.emit(XMPPEvents.AUTHENTICATION_REQUIRED, // External authentication mode
|
||||||
|
function () {
|
||||||
Moderator.allocateConferenceFocus(
|
Moderator.allocateConferenceFocus(
|
||||||
roomName, callback);
|
roomName, callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
var RTCEvents = {
|
||||||
|
LASTN_CHANGED: "rtc.lastn_changed",
|
||||||
|
DOMINANTSPEAKER_CHANGED: "rtc.dominantspeaker_changed",
|
||||||
|
LASTN_ENDPOINT_CHANGED: "rtc.lastn_endpoint_changed",
|
||||||
|
SIMULCAST_LAYER_CHANGED: "rtc.simulcast_layer_changed",
|
||||||
|
SIMULCAST_LAYER_CHANGING: "rtc.simulcast_layer_changing",
|
||||||
|
SIMULCAST_START: "rtc.simlcast_start",
|
||||||
|
SIMULCAST_STOP: "rtc.simlcast_stop"
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ var XMPPEvents = {
|
||||||
MESSAGE_RECEIVED: "xmpp.message_received",
|
MESSAGE_RECEIVED: "xmpp.message_received",
|
||||||
SENDING_CHAT_MESSAGE: "xmpp.sending_chat_message",
|
SENDING_CHAT_MESSAGE: "xmpp.sending_chat_message",
|
||||||
PASSWORD_REQUIRED: "xmpp.password_required",
|
PASSWORD_REQUIRED: "xmpp.password_required",
|
||||||
|
AUTHENTICATION_REQUIRED: "xmpp.authentication_required",
|
||||||
CHAT_ERROR_RECEIVED: "xmpp.chat_error_received",
|
CHAT_ERROR_RECEIVED: "xmpp.chat_error_received",
|
||||||
ETHERPAD: "xmpp.etherpad"
|
ETHERPAD: "xmpp.etherpad"
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue