v1.3.0-beta/start of voice call and custom code:
This commit is contained in:
+61
-58
@@ -1,67 +1,70 @@
|
||||
/* global webkitRTCPeerConnection */
|
||||
const emptyListener = (e) => console.log('EMPTY LISTENER FOR PHONE MANAGER', e);
|
||||
import { VoxeetSDK } from '@voxeet/voxeet-web-sdk';
|
||||
import { GetVoxeetTokenApi, GetRefreshedVoxeetTokenApi } from './Api';
|
||||
|
||||
const CONFIG = {
|
||||
iceServers: [
|
||||
{
|
||||
urls: [
|
||||
'stun:stun.l.google.com:19302',
|
||||
'stun:stun1.l.google.com:19302',
|
||||
'stun:stun2.l.google.com:19302',
|
||||
'stun:stun3.l.google.com:19302',
|
||||
'stun:stun4.l.google.com:19302',
|
||||
],
|
||||
},
|
||||
],
|
||||
iceCandidatePoolSize: 10,
|
||||
};
|
||||
|
||||
export default class PhoneManager {
|
||||
constructor(listener = emptyListener) {
|
||||
this.mediaStream = null;
|
||||
class CallManager {
|
||||
constructor(listener) {
|
||||
this.listener = listener;
|
||||
/* B I N D S */
|
||||
this.joinCall = this.joinCall.bind(this);
|
||||
this.getMediaStream = this.getMediaStream.bind(this);
|
||||
this.__refreshToken = null;
|
||||
this.__accessToken = null;
|
||||
}
|
||||
async getMediaStream() {
|
||||
toggleCall(onCall, conferenceRoomId) {
|
||||
if (onCall === true) this.leaveCall();
|
||||
else this.boot(conferenceRoomId);
|
||||
}
|
||||
async boot(conferenceRoomId) {
|
||||
if (
|
||||
this.__accessToken !== undefined &&
|
||||
this.__refreshToken !== undefined &&
|
||||
this.__accessToken !== null &&
|
||||
this.__refreshToken !== null
|
||||
) {
|
||||
try {
|
||||
await VoxeetSDK.session.open({
|
||||
externalId: window.localStorage.getItem('watchPartyUserUid'),
|
||||
name: window.localStorage.getItem('watchPartyUserName'),
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error Opening Voxeet Session', error);
|
||||
}
|
||||
} else {
|
||||
this.initialize();
|
||||
}
|
||||
}
|
||||
async leaveCall() {}
|
||||
async openSession() {}
|
||||
async initialize() {
|
||||
GetVoxeetTokenApi()
|
||||
.then((res) => res.json())
|
||||
.then((tokenResult) => {
|
||||
if (tokenResult.status <= 299) {
|
||||
const { access_token, refresh_token } = tokenResult;
|
||||
this.updateTokens(access_token, refresh_token);
|
||||
VoxeetSDK.initializeToken(access_token, this.refreshToken);
|
||||
} else {
|
||||
console.error('Get Voxeet Token API Result Error', tokenResult);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('Get Voxeet Token API error', err);
|
||||
});
|
||||
}
|
||||
async refreshToken() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.mediaStream !== null && this.mediaStream !== undefined) resolve(true);
|
||||
navigator.mediaDevices
|
||||
.getUserMedia({
|
||||
video: false,
|
||||
audio: true,
|
||||
GetRefreshedVoxeetTokenApi({ token: this.__refreshToken })
|
||||
.then((res) => res.json())
|
||||
.then((tokenResult) => {
|
||||
const { access_token, refresh_token } = tokenResult;
|
||||
this.updateTokens(access_token, refresh_token);
|
||||
resolve(access_token);
|
||||
})
|
||||
.then((mediaStream) => {
|
||||
this.mediaStream = mediaStream;
|
||||
resolve(true);
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
.catch((err) => {
|
||||
console.error('Get Voxeet Token API error', err);
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
async joinCall() {
|
||||
await this.getMediaStream();
|
||||
|
||||
var peerConnection = new webkitRTCPeerConnection(CONFIG);
|
||||
console.log('Created Peer Connection', peerConnection);
|
||||
|
||||
peerConnection.addTrack(this.mediaStream.getAudioTracks()[0], this.mediaStream);
|
||||
peerConnection.onicecandidate = (ev) => console.log('Got ICE', ev);
|
||||
|
||||
var offer = peerConnection.createOffer();
|
||||
console.log('Created Offer', offer);
|
||||
|
||||
var answer = peerConnection.createAnswer();
|
||||
console.log('Created Answer', answer);
|
||||
}
|
||||
async leaveCall() {
|
||||
if (this.mediaStream !== null && this.mediaStream !== undefined) {
|
||||
this.mediaStream.getAudioTracks().forEach((track) => track.stop());
|
||||
}
|
||||
}
|
||||
toggleMute() {
|
||||
if (this.mediaStream !== null && this.mediaStream !== undefined) {
|
||||
this.mediaStream.getAudioTracks().forEach((track) => (track.enabled = !track.enabled));
|
||||
}
|
||||
updateTokens(aT, rT) {
|
||||
this.__accessToken = aT;
|
||||
this.__refreshToken = rT;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user