Add full audio support
This commit is contained in:
12
src/events/onBroadcastFinished.tsx
Normal file
12
src/events/onBroadcastFinished.tsx
Normal file
@@ -0,0 +1,12 @@
|
||||
import type { MutableRefObject } from 'react';
|
||||
import nativeEmitter from '../native-messaging/emitter';
|
||||
|
||||
export function setupListener(_webViewRef: MutableRefObject<any>) {
|
||||
// Resolve promise when SDP offer is available
|
||||
nativeEmitter.addListener('onBroadcastFinished', () => {
|
||||
console.log(`Broadcast finished`);
|
||||
_webViewRef.current.injectJavaScript(
|
||||
`window.bbbMobileScreenShareBroadcastFinishedCallback && window.bbbMobileScreenShareBroadcastFinishedCallback();`
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -12,7 +12,7 @@ export function setupListener(_webViewRef: MutableRefObject<any>) {
|
||||
}
|
||||
const event = { candidate: iceCandidate };
|
||||
_webViewRef.current.injectJavaScript(
|
||||
`window.bbbMobileScreenShareIceCandidateCallback(${JSON.stringify(
|
||||
`window.bbbMobileScreenShareIceCandidateCallback && window.bbbMobileScreenShareIceCandidateCallback(${JSON.stringify(
|
||||
event
|
||||
)});`
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ export function setupListener(_webViewRef: MutableRefObject<any>) {
|
||||
nativeEmitter.addListener('onScreenShareSignalingStateChange', (newState) => {
|
||||
console.log(`Temos um novo state: ${newState}`);
|
||||
_webViewRef.current.injectJavaScript(
|
||||
`window.bbbMobileScreenShareSignalingStateChangeCallback(${JSON.stringify(
|
||||
`window.bbbMobileScreenShareSignalingStateChangeCallback && window.bbbMobileScreenShareSignalingStateChangeCallback(${JSON.stringify(
|
||||
newState
|
||||
)});`
|
||||
);
|
||||
|
||||
@@ -5,6 +5,7 @@ import { WebView } from 'react-native-webview';
|
||||
import { handleWebviewMessage } from './webview/message-handler';
|
||||
import * as onScreenShareLocalIceCandidate from './events/onScreenShareLocalIceCandidate';
|
||||
import * as onScreenShareSignalingStateChange from './events/onScreenShareSignalingStateChange';
|
||||
import * as onBroadcastFinished from './events/onBroadcastFinished';
|
||||
|
||||
type BigbluebuttonMobileSdkProps = {
|
||||
url: string;
|
||||
@@ -30,6 +31,7 @@ export const BigBlueButtonMobile = ({
|
||||
useEffect(() => {
|
||||
onScreenShareLocalIceCandidate.setupListener(webViewRef);
|
||||
onScreenShareSignalingStateChange.setupListener(webViewRef);
|
||||
onBroadcastFinished.setupListener(webViewRef);
|
||||
}, [webViewRef]);
|
||||
|
||||
return (
|
||||
|
||||
32
src/methods/createFullAudioOffer.tsx
Normal file
32
src/methods/createFullAudioOffer.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
import { createFullAudioOffer as nativeCreateFullAudioOffer } from '../native-components/BBBN_FullAudioService';
|
||||
import nativeEmitter from '../native-messaging/emitter';
|
||||
|
||||
// Reference to the resolver of last call
|
||||
let resolve = (a: String) => {
|
||||
console.log(
|
||||
`default resolve function called, this should never happen: ${a}`
|
||||
);
|
||||
};
|
||||
|
||||
// Resolve promise when SDP offer is available
|
||||
nativeEmitter.addListener('onFullAudioOfferCreated', (sdp) => {
|
||||
resolve(sdp);
|
||||
});
|
||||
|
||||
// Entry point of this method
|
||||
function createFullAudioOffer() {
|
||||
return new Promise((res, rej) => {
|
||||
// store the resolver for later call (when event is received)
|
||||
resolve = res;
|
||||
|
||||
try {
|
||||
console.log(`>nativeCreateFullAudioOffer`);
|
||||
// call native swift method that triggers the broadcast popup
|
||||
nativeCreateFullAudioOffer();
|
||||
} catch (e) {
|
||||
rej(`Call to nativeCreateFullAudioOffer failed`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default createFullAudioOffer;
|
||||
32
src/methods/setFullAudioRemoteSDP.tsx
Normal file
32
src/methods/setFullAudioRemoteSDP.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
import { setFullAudioRemoteSDP as nativeSetFullAudioRemoteSDP } from '../native-components/BBBN_FullAudioService';
|
||||
import nativeEmitter from '../native-messaging/emitter';
|
||||
|
||||
// Reference to the resolver of last call
|
||||
let resolve = (value: unknown) => {
|
||||
console.log(
|
||||
`default resolve function called, this should never happen: ${value}`
|
||||
);
|
||||
};
|
||||
|
||||
// Resolve promise when SDP offer is available
|
||||
nativeEmitter.addListener('onSetFullAudioRemoteSDPCompleted', () => {
|
||||
resolve(undefined);
|
||||
});
|
||||
|
||||
// Entry point of this method
|
||||
function setFullAudioRemoteSDP(remoteSdp: string) {
|
||||
return new Promise((res, rej) => {
|
||||
// store the resolver for later call (when event is received)
|
||||
resolve = res;
|
||||
|
||||
try {
|
||||
console.log(`>nativeSetFullAudioRemoteSDP ${remoteSdp}`);
|
||||
// call native swift method that triggers the broadcast popup
|
||||
nativeSetFullAudioRemoteSDP(remoteSdp);
|
||||
} catch (e) {
|
||||
rej(`Call to nativeSetFullAudioRemoteSDP failed`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default setFullAudioRemoteSDP;
|
||||
19
src/native-components/BBBN_FullAudioService.tsx
Normal file
19
src/native-components/BBBN_FullAudioService.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { NativeModules } from 'react-native';
|
||||
|
||||
const FullAudioService = NativeModules.BBBN_FullAudioService;
|
||||
|
||||
// export function initializeFullAudio() {
|
||||
// FullAudioService.initializeFullAudio();
|
||||
// }
|
||||
|
||||
export function createFullAudioOffer() {
|
||||
FullAudioService.createFullAudioOffer();
|
||||
}
|
||||
|
||||
export function setFullAudioRemoteSDP(remoteSDP: string) {
|
||||
FullAudioService.setFullAudioRemoteSDP(remoteSDP);
|
||||
}
|
||||
|
||||
// export function addFullAudioRemoteIceCandidate(remoteCandidateJson: string) {
|
||||
// FullAudioService.addFullAudioRemoteIceCandidate(remoteCandidateJson);
|
||||
// }
|
||||
@@ -3,7 +3,9 @@ import type { WebView, WebViewMessageEvent } from 'react-native-webview';
|
||||
import initializeScreenShare from '../methods/initializeScreenShare';
|
||||
import createScreenShareOffer from '../methods/createScreenShareOffer';
|
||||
import setScreenShareRemoteSDP from '../methods/setScreenShareRemoteSDP';
|
||||
import setFullAudioRemoteSDP from '../methods/setFullAudioRemoteSDP';
|
||||
import addScreenShareRemoteIceCandidate from '../methods/addScreenShareRemoteIceCandidate';
|
||||
import createFullAudioOffer from '../methods/createFullAudioOffer';
|
||||
|
||||
function observePromiseResult(
|
||||
webViewRef: MutableRefObject<WebView>,
|
||||
@@ -42,12 +44,18 @@ export function handleWebviewMessage(
|
||||
case 'initializeScreenShare':
|
||||
promise = initializeScreenShare();
|
||||
break;
|
||||
case 'createOffer':
|
||||
case 'createFullAudioOffer':
|
||||
promise = createFullAudioOffer();
|
||||
break;
|
||||
case 'createScreenShareOffer':
|
||||
promise = createScreenShareOffer();
|
||||
break;
|
||||
case 'setRemoteDescription':
|
||||
case 'setScreenShareRemoteSDP':
|
||||
promise = setScreenShareRemoteSDP(data?.arguments[0].sdp);
|
||||
break;
|
||||
case 'setFullAudioRemoteSDP':
|
||||
promise = setFullAudioRemoteSDP(data?.arguments[0].sdp);
|
||||
break;
|
||||
case 'addRemoteIceCandidate':
|
||||
promise = addScreenShareRemoteIceCandidate(
|
||||
JSON.stringify(data?.arguments[0])
|
||||
|
||||
Reference in New Issue
Block a user