v1.3.0-beta/start of voice call and custom code:

This commit is contained in:
Ayushya Amitabh
2020-05-29 17:43:10 -04:00
parent 2053c2860a
commit ccd7f1cfab
15 changed files with 396 additions and 123 deletions
+61 -58
View File
@@ -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;
}
}