ref(iframe_api): Use EventEmitter

This commit is contained in:
hristoterezov 2017-03-31 11:38:44 -05:00
parent 78119df2db
commit d416fd8c0f
2 changed files with 24 additions and 24 deletions

View File

@ -123,12 +123,13 @@ You can also execute multiple commands using the `executeCommands` method:
```javascript ```javascript
api.executeCommands(commands) api.executeCommands(commands)
``` ```
The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands asvalues: The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands as values:
```javascript ```javascript
api.executeCommands({displayName: ['nickname'], toggleAudio: []}); api.executeCommands({displayName: ['nickname'], toggleAudio: []});
``` ```
You can add event listeners to the embedded Jitsi Meet using the `addEventListener` method. You can add event listeners to the embedded Jitsi Meet using the `addEventListener` method.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods (`addListener` or `on`).*
```javascript ```javascript
api.addEventListener(event, listener) api.addEventListener(event, listener)
``` ```
@ -198,6 +199,7 @@ changes. The listener will receive an object with the following structure:
You can also add multiple event listeners by using `addEventListeners`. You can also add multiple event listeners by using `addEventListeners`.
This method requires one argument of type Object. The object argument must This method requires one argument of type Object. The object argument must
have the names of the events as keys and the listeners of the events as values. have the names of the events as keys and the listeners of the events as values.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
```javascript ```javascript
function incomingMessageListener(object) function incomingMessageListener(object)
@ -216,12 +218,13 @@ api.addEventListeners({
``` ```
If you want to remove a listener you can use `removeEventListener` method with argument the name of the event. If you want to remove a listener you can use `removeEventListener` method with argument the name of the event.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( `removeListener`).*
```javascript ```javascript
api.removeEventListener("incomingMessage"); api.removeEventListener("incomingMessage");
``` ```
If you want to remove more than one event you can use `removeEventListeners` method with an Array with the names of the events as an argument. If you want to remove more than one event you can use `removeEventListeners` method with an Array with the names of the events as an argument.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
```javascript ```javascript
api.removeEventListeners(["incomingMessage", "outgoingMessageListener"]); api.removeEventListeners(["incomingMessage", "outgoingMessageListener"]);
``` ```
@ -240,3 +243,4 @@ NOTE: It's a good practice to remove the conference before the page is unloaded.
[config.js]: https://github.com/jitsi/jitsi-meet/blob/master/config.js [config.js]: https://github.com/jitsi/jitsi-meet/blob/master/config.js
[interface_config.js]: https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js [interface_config.js]: https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js
[EventEmitter]: https://nodejs.org/api/events.html

View File

@ -1,5 +1,6 @@
const logger = require("jitsi-meet-logger").getLogger(__filename); const logger = require("jitsi-meet-logger").getLogger(__filename);
import postisInit from "postis"; import postisInit from "postis";
import EventEmitter from "events";
/** /**
* The minimum width for the Jitsi Meet frame * The minimum width for the Jitsi Meet frame
@ -99,7 +100,7 @@ function configToURLParamsArray(config) {
/** /**
* The IFrame API interface class. * The IFrame API interface class.
*/ */
class JitsiMeetExternalAPI { class JitsiMeetExternalAPI extends EventEmitter {
/** /**
* Constructs new API instance. Creates iframe element that loads * Constructs new API instance. Creates iframe element that loads
* Jitsi Meet. * Jitsi Meet.
@ -119,6 +120,8 @@ class JitsiMeetExternalAPI {
*/ */
constructor(domain, room_name, width, height, parentNode, constructor(domain, room_name, width, height, parentNode,
configOverwrite, interfaceConfigOverwrite, noSsl, jwt) { configOverwrite, interfaceConfigOverwrite, noSsl, jwt) {
super();
if (!width || width < MIN_WIDTH) { if (!width || width < MIN_WIDTH) {
width = MIN_WIDTH; width = MIN_WIDTH;
} }
@ -283,6 +286,8 @@ class JitsiMeetExternalAPI {
* readyToClose - all hangup operations are completed and Jitsi Meet is * readyToClose - all hangup operations are completed and Jitsi Meet is
* ready to be disposed. * ready to be disposed.
* @param object * @param object
*
* NOTE: This method is not removed for backward comatability purposes.
*/ */
addEventListeners(object) { addEventListeners(object) {
for (var i in object) { for (var i in object) {
@ -336,41 +341,26 @@ class JitsiMeetExternalAPI {
* }} * }}
* @param event the name of the event * @param event the name of the event
* @param listener the listener * @param listener the listener
*
* NOTE: This method is not removed for backward comatability purposes.
*/ */
addEventListener(event, listener) { addEventListener(event, listener) {
if (!(event in events)) { this.on(event, listener);
logger.error("Not supported event name.");
return;
}
// We cannot remove listeners from postis that's why we are handling the
// callback that way.
if (!this.postisListeners[event]) {
this.postis.listen(events[event], data => {
if((event in this.eventHandlers) &&
typeof this.eventHandlers[event] === "function")
this.eventHandlers[event].call(null, data);
});
this.postisListeners[event] = true;
}
this.eventHandlers[event] = listener;
} }
/** /**
* Removes event listener. * Removes event listener.
* @param event the name of the event. * @param event the name of the event.
* NOTE: This method is not removed for backward comatability purposes.
*/ */
removeEventListener(event) { removeEventListener(event) {
if(!(event in this.eventHandlers)) this.removeListeners(event);
{
logger.error("The event " + event + " is not registered.");
return;
}
delete this.eventHandlers[event];
} }
/** /**
* Removes event listeners. * Removes event listeners.
* @param events array with the names of the events. * @param events array with the names of the events.
* NOTE: This method is not removed for backward comatability purposes.
*/ */
removeEventListeners(events) { removeEventListeners(events) {
for(var i = 0; i < events.length; i++) { for(var i = 0; i < events.length; i++) {
@ -395,6 +385,12 @@ class JitsiMeetExternalAPI {
changeParticipantNumber.bind(null, this, 1)); changeParticipantNumber.bind(null, this, 1));
this.postis.listen("participant-left", this.postis.listen("participant-left",
changeParticipantNumber.bind(null, this, -1)); changeParticipantNumber.bind(null, this, -1));
for (const eventName in events) {
const postisMethod = events[eventName];
this.postis.listen(postisMethod,
(...args) => this.emit(eventName, ...args));
}
} }
/** /**