|
@@ -2,6 +2,7 @@
|
2
|
2
|
import DataChannels from './DataChannels';
|
3
|
3
|
import { getLogger } from 'jitsi-meet-logger';
|
4
|
4
|
import GlobalOnErrorHandler from '../util/GlobalOnErrorHandler';
|
|
5
|
+import * as JitsiConferenceEvents from '../../JitsiConferenceEvents';
|
5
|
6
|
import JitsiLocalTrack from './JitsiLocalTrack.js';
|
6
|
7
|
import JitsiTrackError from '../../JitsiTrackError';
|
7
|
8
|
import * as JitsiTrackErrors from '../../JitsiTrackErrors';
|
|
@@ -90,7 +91,7 @@ export default class RTC extends Listenable {
|
90
|
91
|
this._lastNEndpoints = null;
|
91
|
92
|
|
92
|
93
|
// The last N change listener.
|
93
|
|
- this._lastNChangeListener = null;
|
|
94
|
+ this._lastNChangeListener = this._onLastNChanged.bind(this);
|
94
|
95
|
|
95
|
96
|
// Switch audio output device on all remote audio tracks. Local audio
|
96
|
97
|
// tracks handle this event by themselves.
|
|
@@ -169,15 +170,39 @@ export default class RTC extends Listenable {
|
169
|
170
|
this._dataChannelOpenListener);
|
170
|
171
|
|
171
|
172
|
// Add Last N change listener.
|
172
|
|
- this._lastNChangeListener = lastNEndpoints => {
|
173
|
|
- this._lastNEndpoints = lastNEndpoints;
|
174
|
|
- };
|
175
|
|
-
|
176
|
173
|
this.addListener(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
177
|
174
|
this._lastNChangeListener);
|
178
|
175
|
}
|
179
|
176
|
}
|
180
|
177
|
|
|
178
|
+ /**
|
|
179
|
+ * Receives events when Last N had changed.
|
|
180
|
+ * @param {array} lastNEndpoints the new Last N endpoints.
|
|
181
|
+ * @private
|
|
182
|
+ */
|
|
183
|
+ _onLastNChanged(lastNEndpoints) {
|
|
184
|
+ const oldLastNEndpoints = this._lastNEndpoints;
|
|
185
|
+ let leavingLastNEndpoints = [];
|
|
186
|
+ let enteringLastNEndpoints = [];
|
|
187
|
+
|
|
188
|
+ this._lastNEndpoints = lastNEndpoints;
|
|
189
|
+
|
|
190
|
+ if (oldLastNEndpoints) {
|
|
191
|
+ leavingLastNEndpoints = oldLastNEndpoints.filter(
|
|
192
|
+ id => !this.isInLastN(id));
|
|
193
|
+
|
|
194
|
+ if (lastNEndpoints) {
|
|
195
|
+ enteringLastNEndpoints = lastNEndpoints.filter(
|
|
196
|
+ id => oldLastNEndpoints.indexOf(id) === -1);
|
|
197
|
+ }
|
|
198
|
+ }
|
|
199
|
+
|
|
200
|
+ this.conference.eventEmitter.emit(
|
|
201
|
+ JitsiConferenceEvents.LAST_N_ENDPOINTS_CHANGED,
|
|
202
|
+ leavingLastNEndpoints,
|
|
203
|
+ enteringLastNEndpoints);
|
|
204
|
+ }
|
|
205
|
+
|
181
|
206
|
/**
|
182
|
207
|
* Should be called when current media session ends and after the
|
183
|
208
|
* PeerConnection has been closed using PeerConnection.close() method.
|
|
@@ -600,10 +625,8 @@ export default class RTC extends Listenable {
|
600
|
625
|
this.dataChannels.closeAllChannels();
|
601
|
626
|
this.dataChannelsOpen = false;
|
602
|
627
|
|
603
|
|
- if (this._lastNChangeListener) {
|
604
|
|
- this.removeListener(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
605
|
|
- this._lastNChangeListener);
|
606
|
|
- }
|
|
628
|
+ this.removeListener(RTCEvents.LASTN_ENDPOINT_CHANGED,
|
|
629
|
+ this._lastNChangeListener);
|
607
|
630
|
}
|
608
|
631
|
}
|
609
|
632
|
|