This repository has been archived by the owner on Jul 8, 2022. It is now read-only.
/
openvidu.service.ts
108 lines (101 loc) · 4.39 KB
/
openvidu.service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
import { throwError as observableThrowError } from 'rxjs';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx';
@Injectable({
providedIn: 'root',
})
export class OpenViduService {
OPENVIDU_SERVER_URL = 'https://demos.openvidu.io';
MY_SECRET = 'MY_SECRET';
ANDROID_PERMISSIONS = [
'android.permission.CAMERA',
'android.permission.RECORD_AUDIO',
'android.permission.MODIFY_AUDIO_SETTINGS',
'android.permission.BLUETOOTH',
'android.permission.BLUETOOTH_ADMIN'
];
constructor(private http: HttpClient, private androidPermissions: AndroidPermissions) {}
getToken(mySessionId: string): Promise<string> {
return this.createSession(mySessionId, this.OPENVIDU_SERVER_URL, this.MY_SECRET).then((sessionId: string) => {
return this.createToken(sessionId, this.OPENVIDU_SERVER_URL, this.MY_SECRET);
});
}
createSession(sessionId: string, openviduServerUrl: string, openviduSecret: string) {
return new Promise((resolve, reject) => {
const body = JSON.stringify({ customSessionId: sessionId });
const options = {
headers: new HttpHeaders({
'Authorization': 'Basic ' + btoa('OPENVIDUAPP:' + openviduSecret),
'Content-Type': 'application/json',
}),
};
return this.http
.post<any>(openviduServerUrl + '/openvidu/api/sessions', body, options)
.pipe(
catchError((error) => {
error.status === 409 ? resolve(sessionId) : reject(error);
return observableThrowError(error);
}),
)
.subscribe((response) => {
console.log(response);
resolve(response.id);
});
});
}
createToken(sessionId: string, openviduServerUrl: string, openviduSecret: string): Promise<string> {
return new Promise((resolve, reject) => {
const body = JSON.stringify({});
const options = {
headers: new HttpHeaders({
'Authorization': 'Basic ' + btoa('OPENVIDUAPP:' + openviduSecret),
'Content-Type': 'application/json',
}),
};
return this.http
.post<any>(openviduServerUrl + '/openvidu/api/sessions/' + sessionId + '/connection', body, options)
.pipe(
catchError((error) => {
reject(error);
return observableThrowError(error);
}),
)
.subscribe((response) => {
console.log(response);
resolve(response.token);
});
});
}
public getRandomAvatar(): string {
return 'https://openvidu.io/img/logos/openvidu_globe_bg_transp_cropped.png';
}
public checkAndroidPermissions(): Promise<void> {
console.log('Requesting Android Permissions');
return new Promise((resolve, reject) => {
this.androidPermissions.requestPermissions(this.ANDROID_PERMISSIONS)
.then(() => {
const promisesArray: Promise<any> [] = [];
this.ANDROID_PERMISSIONS.forEach((permission) => {
console.log('Checking ', permission);
promisesArray.push(this.androidPermissions.checkPermission(permission));
});
Promise.all(promisesArray).then((responses) => {
let allHasPermissions = true;
responses.forEach((response, i) => {
allHasPermissions = response.hasPermission;
if (!allHasPermissions) {
reject(
new Error(
'Permissions denied: ' + this.ANDROID_PERMISSIONS[i]
));
}
});
resolve();
}).catch((err) => { console.log(err); });
})
.catch((err) => console.error('Error requesting permissions: ', err));
});
}
}