Carlos Santos fb5c56cd87 openvidu-components: Added fault tolerant support
On media node crashed, openvidu-copmponents emits an event for requesting new tokens to the client.
2022-11-07 11:45:15 +01:00

130 lines
3.1 KiB
TypeScript

import { Component, OnInit } from '@angular/core';
import { RecordingInfo, RecordingService, TokenModel } from 'openvidu-angular';
import { RestService } from '../services/rest.service';
@Component({
selector: 'app-call',
templateUrl: './call.component.html',
styleUrls: ['./call.component.scss']
})
export class CallComponent implements OnInit {
sessionId = 'daily-call';
tokens: TokenModel;
joinSessionClicked: boolean = false;
closeClicked: boolean = false;
isSessionAlive: boolean = false;
recordingList: RecordingInfo[] = [];
recordingError: any;
constructor(private restService: RestService, private recordingService: RecordingService) { }
async ngOnInit() {
await this.requestForTokens();
}
async onNodeCrashed() {
// Request the tokens again for reconnect to the session
await this.requestForTokens();
}
onJoinClicked() {
console.warn('VC JOIN BUTTON CLICKED');
}
onToolbarCameraButtonClicked() {
console.warn('VC camera CLICKED');
}
onToolbarMicrophoneButtonClicked() {
console.warn('VC microphone CLICKED');
}
onToolbarScreenshareButtonClicked() {
console.warn('VC screenshare CLICKED');
}
onToolbarFullscreenButtonClicked() {
console.warn('VC fullscreen CLICKED');
}
onToolbarParticipantsPanelButtonClicked() {
console.warn('VC participants CLICKED');
}
onToolbarChatPanelButtonClicked() {
console.warn('VC chat CLICKED');
}
onToolbarLeaveButtonClicked() {
this.isSessionAlive = false;
console.log('VC LEAVE BUTTON CLICKED');
}
onCameraButtonClicked() {
console.warn('TOOLBAR camera CLICKED');
}
onMicrophoneButtonClicked() {
console.warn('TOOLBAR microphone CLICKED');
}
onScreenshareButtonClicked() {
console.warn('TOOLBAR screenshare CLICKED');
}
onFullscreenButtonClicked() {
console.warn('TOOLBAR fullscreen CLICKED');
}
onParticipantsPanelButtonClicked() {
console.warn('TOOLBAR participants CLICKED');
}
onChatPanelButtonClicked() {
console.warn('TOOLBAR chat CLICKED');
}
onLeaveButtonClicked() {
this.isSessionAlive = false;
console.log('TOOLBAR LEAVE CLICKED');
}
async onStartRecordingClicked() {
console.warn('START RECORDING CLICKED');
try {
await this.restService.startRecording(this.sessionId);
} catch (error) {
this.recordingError = error;
}
}
async onStopRecordingClicked() {
console.warn('STOP RECORDING CLICKED');
try {
// await this.restService.startRecording(this.sessionId);
this.recordingList = await this.restService.stopRecording(this.sessionId);
console.log('RECORDING LIST ', this.recordingList);
} catch (error) {
this.recordingError = error;
}
}
async onDeleteRecordingClicked(recordingId: string) {
console.warn('DELETE RECORDING CLICKED');
try {
this.recordingList = await this.restService.deleteRecording(recordingId);
} catch (error) {
this.recordingError = error;
}
}
private async requestForTokens() {
const response = await this.restService.getTokensFromBackend(this.sessionId);
this.recordingList = response.recordings;
this.tokens = {
webcam: response.cameraToken,
screen: response.screenToken
};
console.log('Token requested: ', this.tokens);
}
}