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

@ -129,6 +129,7 @@ api.executeCommands({displayName: ['nickname'], toggleAudio: []});
```
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
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`.
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.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
```javascript
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.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( `removeListener`).*
```javascript
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.
*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
```javascript
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
[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);
import postisInit from "postis";
import EventEmitter from "events";
/**
* The minimum width for the Jitsi Meet frame
@ -99,7 +100,7 @@ function configToURLParamsArray(config) {
/**
* The IFrame API interface class.
*/
class JitsiMeetExternalAPI {
class JitsiMeetExternalAPI extends EventEmitter {
/**
* Constructs new API instance. Creates iframe element that loads
* Jitsi Meet.
@ -119,6 +120,8 @@ class JitsiMeetExternalAPI {
*/
constructor(domain, room_name, width, height, parentNode,
configOverwrite, interfaceConfigOverwrite, noSsl, jwt) {
super();
if (!width || width < MIN_WIDTH) {
width = MIN_WIDTH;
}
@ -283,6 +286,8 @@ class JitsiMeetExternalAPI {
* readyToClose - all hangup operations are completed and Jitsi Meet is
* ready to be disposed.
* @param object
*
* NOTE: This method is not removed for backward comatability purposes.
*/
addEventListeners(object) {
for (var i in object) {
@ -336,41 +341,26 @@ class JitsiMeetExternalAPI {
* }}
* @param event the name of the event
* @param listener the listener
*
* NOTE: This method is not removed for backward comatability purposes.
*/
addEventListener(event, listener) {
if (!(event in events)) {
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;
this.on(event, listener);
}
/**
* Removes event listener.
* @param event the name of the event.
* NOTE: This method is not removed for backward comatability purposes.
*/
removeEventListener(event) {
if(!(event in this.eventHandlers))
{
logger.error("The event " + event + " is not registered.");
return;
}
delete this.eventHandlers[event];
this.removeListeners(event);
}
/**
* Removes event listeners.
* @param events array with the names of the events.
* NOTE: This method is not removed for backward comatability purposes.
*/
removeEventListeners(events) {
for(var i = 0; i < events.length; i++) {
@ -395,6 +385,12 @@ class JitsiMeetExternalAPI {
changeParticipantNumber.bind(null, this, 1));
this.postis.listen("participant-left",
changeParticipantNumber.bind(null, this, -1));
for (const eventName in events) {
const postisMethod = events[eventName];
this.postis.listen(postisMethod,
(...args) => this.emit(eventName, ...args));
}
}
/**