Преглед на файлове

ref(iframe_api): Use EventEmitter

j8
hristoterezov преди 8 години
родител
ревизия
d416fd8c0f
променени са 2 файла, в които са добавени 24 реда и са изтрити 24 реда
  1. 6
    2
      doc/api.md
  2. 18
    22
      modules/API/external/external_api.js

+ 6
- 2
doc/api.md Целия файл

@@ -123,12 +123,13 @@ You can also execute multiple commands using the `executeCommands` method:
123 123
 ```javascript
124 124
 api.executeCommands(commands)
125 125
 ```
126
-The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands asvalues:
126
+The `commands` parameter is an object with the names of the commands as keys and the arguments for the commands as values:
127 127
 ```javascript
128 128
 api.executeCommands({displayName: ['nickname'], toggleAudio: []});
129 129
 ```
130 130
 
131 131
 You can add event listeners to the embedded Jitsi Meet using the `addEventListener` method.
132
+*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods (`addListener` or `on`).*
132 133
 ```javascript
133 134
 api.addEventListener(event, listener)
134 135
 ```
@@ -198,6 +199,7 @@ changes. The listener will receive an object with the following structure:
198 199
 You can also add multiple event listeners by using `addEventListeners`.
199 200
 This method requires one argument of type Object. The object argument must
200 201
 have the names of the events as keys and the listeners of the events as values.
202
+*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
201 203
 
202 204
 ```javascript
203 205
 function incomingMessageListener(object)
@@ -216,12 +218,13 @@ api.addEventListeners({
216 218
 ```
217 219
 
218 220
 If you want to remove a listener you can use `removeEventListener` method with argument the name of the event.
219
-
221
+*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods( `removeListener`).*
220 222
 ```javascript
221 223
 api.removeEventListener("incomingMessage");
222 224
 ```
223 225
 
224 226
 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.
227
+*NOTE: This method still exists but it is deprecated. JitsiMeetExternalAPI class extends [EventEmitter]. Use [EventEmitter] methods.*
225 228
 ```javascript
226 229
 api.removeEventListeners(["incomingMessage", "outgoingMessageListener"]);
227 230
 ```
@@ -240,3 +243,4 @@ NOTE: It's a good practice to remove the conference before the page is unloaded.
240 243
 
241 244
 [config.js]: https://github.com/jitsi/jitsi-meet/blob/master/config.js
242 245
 [interface_config.js]: https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js
246
+[EventEmitter]: https://nodejs.org/api/events.html

+ 18
- 22
modules/API/external/external_api.js Целия файл

@@ -1,5 +1,6 @@
1 1
 const logger = require("jitsi-meet-logger").getLogger(__filename);
2 2
 import postisInit from "postis";
3
+import EventEmitter from "events";
3 4
 
4 5
 /**
5 6
  * The minimum width for the Jitsi Meet frame
@@ -99,7 +100,7 @@ function configToURLParamsArray(config) {
99 100
 /**
100 101
  * The IFrame API interface class.
101 102
  */
102
-class JitsiMeetExternalAPI {
103
+class JitsiMeetExternalAPI extends EventEmitter {
103 104
     /**
104 105
      * Constructs new API instance. Creates iframe element that loads
105 106
      * Jitsi Meet.
@@ -119,6 +120,8 @@ class JitsiMeetExternalAPI {
119 120
      */
120 121
     constructor(domain, room_name, width, height, parentNode,
121 122
         configOverwrite, interfaceConfigOverwrite, noSsl, jwt) {
123
+        super();
124
+
122 125
         if (!width || width < MIN_WIDTH) {
123 126
             width = MIN_WIDTH;
124 127
         }
@@ -283,6 +286,8 @@ class JitsiMeetExternalAPI {
283 286
      * readyToClose - all hangup operations are completed and Jitsi Meet is
284 287
      * ready to be disposed.
285 288
      * @param object
289
+     *
290
+     * NOTE: This method is not removed for backward comatability purposes.
286 291
      */
287 292
     addEventListeners(object) {
288 293
         for (var i in object) {
@@ -336,41 +341,26 @@ class JitsiMeetExternalAPI {
336 341
      * }}
337 342
      * @param event the name of the event
338 343
      * @param listener the listener
344
+     *
345
+     * NOTE: This method is not removed for backward comatability purposes.
339 346
      */
340 347
     addEventListener(event, listener) {
341
-        if (!(event in events)) {
342
-            logger.error("Not supported event name.");
343
-            return;
344
-        }
345
-        // We cannot remove listeners from postis that's why we are handling the
346
-        // callback that way.
347
-        if (!this.postisListeners[event]) {
348
-            this.postis.listen(events[event], data => {
349
-                if((event in this.eventHandlers) &&
350
-                    typeof this.eventHandlers[event] === "function")
351
-                    this.eventHandlers[event].call(null, data);
352
-            });
353
-            this.postisListeners[event] = true;
354
-        }
355
-        this.eventHandlers[event] = listener;
348
+        this.on(event, listener);
356 349
     }
357 350
 
358 351
     /**
359 352
      * Removes event listener.
360 353
      * @param event the name of the event.
354
+     * NOTE: This method is not removed for backward comatability purposes.
361 355
      */
362 356
     removeEventListener(event) {
363
-        if(!(event in this.eventHandlers))
364
-        {
365
-            logger.error("The event " + event + " is not registered.");
366
-            return;
367
-        }
368
-        delete this.eventHandlers[event];
357
+        this.removeListeners(event);
369 358
     }
370 359
 
371 360
     /**
372 361
      * Removes event listeners.
373 362
      * @param events array with the names of the events.
363
+     * NOTE: This method is not removed for backward comatability purposes.
374 364
      */
375 365
     removeEventListeners(events) {
376 366
         for(var i = 0; i < events.length; i++) {
@@ -395,6 +385,12 @@ class JitsiMeetExternalAPI {
395 385
             changeParticipantNumber.bind(null, this, 1));
396 386
         this.postis.listen("participant-left",
397 387
             changeParticipantNumber.bind(null, this, -1));
388
+
389
+        for (const eventName in events) {
390
+            const postisMethod = events[eventName];
391
+            this.postis.listen(postisMethod,
392
+                (...args) => this.emit(eventName, ...args));
393
+        }
398 394
     }
399 395
 
400 396
     /**

Loading…
Отказ
Запис