From a216703cec2237ddb1ef1f994163395f27bd2486 Mon Sep 17 00:00:00 2001 From: Anton Georgiev <anto.georgiev@gmail.com> Date: Wed, 21 Nov 2018 13:46:13 +0000 Subject: [PATCH] avoid race condition when detecting user join from outside iframe --- bbb-api-demo/src/main/webapp/demo_iframe.jsp | 12 ++++++++++-- .../ui/components/audio/audio-controls/container.jsx | 9 +++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bbb-api-demo/src/main/webapp/demo_iframe.jsp b/bbb-api-demo/src/main/webapp/demo_iframe.jsp index 3cd02f6fda..e8aafb61d2 100644 --- a/bbb-api-demo/src/main/webapp/demo_iframe.jsp +++ b/bbb-api-demo/src/main/webapp/demo_iframe.jsp @@ -133,10 +133,11 @@ muteButton.id = 'muteButton'; function getInitialState() { document.getElementById('client-content').contentWindow.postMessage('c_recording_status', '*'); - document.getElementById('client-content').contentWindow.postMessage('c_mute_status', '*'); + document.getElementById('client-content').contentWindow.postMessage('get_audio_joined_status', '*'); } function handleMessage(e) { + let neverJoinedAudio = true; switch (e) { case 'readyToConnect': { // get initial state @@ -160,11 +161,18 @@ function handleMessage(e) { case 'notInAudio': { muteButton.innerHTML = 'Not in audio'; document.getElementById('muteButton').disabled = true; + if (neverJoinedAudio) { + // poll every 1 sec to check if we joined audio + setTimeout(function(){ + document.getElementById('client-content').contentWindow.postMessage('get_audio_joined_status', '*'); + }, 1000);} break; } case 'joinedAudio': { + neverJoinedAudio = false; muteButton.innerHTML = ''; - document.getElementById('muteButton').disabled = false; getInitialState(); + document.getElementById('muteButton').disabled = false; + document.getElementById('client-content').contentWindow.postMessage('c_mute_status', '*'); break; } default: console.log('neither', { e }); diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx index b2334ede83..6e7124fad1 100644 --- a/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/audio/audio-controls/container.jsx @@ -15,11 +15,12 @@ const processToggleMuteFromOutside = (e) => { makeCall('toggleSelfVoice'); break; } + case 'get_audio_joined_status': { + const audioJoinedState = AudioManager.isConnected ? 'joinedAudio' : 'notInAudio'; + this.window.parent.postMessage({ response: audioJoinedState }, '*'); + break; + } case 'c_mute_status': { - if (!AudioManager.isUsingAudio()) { - this.window.parent.postMessage({ response: 'notInAudio' }, '*'); - return; - } const muteState = AudioManager.isMuted ? 'selfMuted' : 'selfUnmuted'; this.window.parent.postMessage({ response: muteState }, '*'); break; -- GitLab