From b9f51ab40a8d7f106a6a6ecb2e908e12a953d740 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 28 Aug 2018 17:44:03 +0200 Subject: [PATCH] openvidu-browser: force filter operations for moderators --- openvidu-browser/src/OpenVidu/Filter.ts | 4 +- openvidu-browser/src/OpenVidu/Session.ts | 98 +++++++++++++----------- 2 files changed, 55 insertions(+), 47 deletions(-) diff --git a/openvidu-browser/src/OpenVidu/Filter.ts b/openvidu-browser/src/OpenVidu/Filter.ts index a7b08eba..0f50e6e4 100644 --- a/openvidu-browser/src/OpenVidu/Filter.ts +++ b/openvidu-browser/src/OpenVidu/Filter.ts @@ -137,7 +137,7 @@ export class Filter { console.info('Adding filter event listener to event ' + eventType + ' to stream ' + this.stream.streamId); this.stream.session.openvidu.sendRequest( 'addFilterEventListener', - { streamId: this.stream.streamId, type: eventType }, + { streamId: this.stream.streamId, eventType }, (error, response) => { if (error) { console.error('Error adding filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error); @@ -169,7 +169,7 @@ export class Filter { console.info('Removing filter event listener to event ' + eventType + ' to stream ' + this.stream.streamId); this.stream.session.openvidu.sendRequest( 'removeFilterEventListener', - { streamId: this.stream.streamId, type: eventType }, + { streamId: this.stream.streamId, eventType }, (error, response) => { if (error) { console.error('Error removing filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error); diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index 4dffbaeb..7d6acfbe 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -771,54 +771,62 @@ export class Session implements EventDispatcher { * @hidden */ onStreamPropertyChanged(msg): void { - this.getRemoteConnection(msg.connectionId, 'Remote connection ' + msg.connectionId + " unknown when 'onStreamPropertyChanged'. " + - 'Existing remote connections: ' + JSON.stringify(Object.keys(this.remoteConnections))) - .then(connection => { - if (!!connection.stream && connection.stream.streamId === msg.streamId) { - const stream = connection.stream; - let oldValue; - switch (msg.property) { - case 'audioActive': - oldValue = stream.audioActive; - msg.newValue = msg.newValue === 'true'; - stream.audioActive = msg.newValue; - break; - case 'videoActive': - oldValue = stream.videoActive; - msg.newValue = msg.newValue === 'true'; - stream.videoActive = msg.newValue; - break; - case 'videoDimensions': - oldValue = stream.videoDimensions; - msg.newValue = JSON.parse(JSON.parse(msg.newValue)); - stream.videoDimensions = msg.newValue; - break; - case 'filter': - oldValue = stream.filter; - msg.newValue = (Object.keys(msg.newValue).length > 0) ? msg.newValue : undefined; - if (msg.newValue !== undefined) { - stream.filter = new Filter(msg.newValue.type, msg.newValue.options); - stream.filter.stream = stream; - if (msg.newValue.lastExecMethod) { - stream.filter.lastExecMethod = msg.newValue.lastExecMethod; - } - } else { - delete stream.filter; + const callback = (connection: Connection) => { + if (!!connection.stream && connection.stream.streamId === msg.streamId) { + const stream = connection.stream; + let oldValue; + switch (msg.property) { + case 'audioActive': + oldValue = stream.audioActive; + msg.newValue = msg.newValue === 'true'; + stream.audioActive = msg.newValue; + break; + case 'videoActive': + oldValue = stream.videoActive; + msg.newValue = msg.newValue === 'true'; + stream.videoActive = msg.newValue; + break; + case 'videoDimensions': + oldValue = stream.videoDimensions; + msg.newValue = JSON.parse(JSON.parse(msg.newValue)); + stream.videoDimensions = msg.newValue; + break; + case 'filter': + oldValue = stream.filter; + msg.newValue = (Object.keys(msg.newValue).length > 0) ? msg.newValue : undefined; + if (msg.newValue !== undefined) { + stream.filter = new Filter(msg.newValue.type, msg.newValue.options); + stream.filter.stream = stream; + if (msg.newValue.lastExecMethod) { + stream.filter.lastExecMethod = msg.newValue.lastExecMethod; } - msg.newValue = stream.filter; - break; - } - - this.ee.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this, stream, msg.property, msg.newValue, oldValue, msg.reason)]); - stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(stream.streamManager, stream, msg.property, msg.newValue, oldValue, msg.reason)]); - } else { - console.error("No stream with streamId '" + msg.streamId + "' found for connection '" + msg.connectionId + "' on 'streamPropertyChanged' event"); + } else { + delete stream.filter; + } + msg.newValue = stream.filter; + break; } - }) - .catch(openViduError => { - console.error(openViduError); - }); + this.ee.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this, stream, msg.property, msg.newValue, oldValue, msg.reason)]); + stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(stream.streamManager, stream, msg.property, msg.newValue, oldValue, msg.reason)]); + } else { + console.error("No stream with streamId '" + msg.streamId + "' found for connection '" + msg.connectionId + "' on 'streamPropertyChanged' event"); + } + }; + + if (msg.connectionId === this.connection.connectionId) { + // Your stream has been forcedly changed (filter feature) + callback(this.connection); + } else { + this.getRemoteConnection(msg.connectionId, 'Remote connection ' + msg.connectionId + " unknown when 'onStreamPropertyChanged'. " + + 'Existing remote connections: ' + JSON.stringify(Object.keys(this.remoteConnections))) + .then(connection => { + callback(connection); + }) + .catch(openViduError => { + console.error(openViduError); + }); + } } /**