openvidu-components: Refactored participant service

Moved some methods to participant model
pull/809/head
Carlos Santos 2023-03-01 18:04:17 +01:00
parent 749948a6d9
commit d78774b218
3 changed files with 35 additions and 39 deletions

View File

@ -253,12 +253,14 @@ export class SessionComponent implements OnInit, OnDestroy {
private async connectToSession(): Promise<void> { private async connectToSession(): Promise<void> {
try { try {
const nickname = this.participantService.getMyNickname(); const participant = this.participantService.getLocalParticipant();
const participantId = this.participantService.getLocalParticipant().id; const nickname = participant.getNickname();
const participantId = participant.id;
const screenPublisher = this.participantService.getMyScreenPublisher(); const screenPublisher = this.participantService.getMyScreenPublisher();
const cameraPublisher = this.participantService.getMyCameraPublisher(); const cameraPublisher = this.participantService.getMyCameraPublisher();
if (this.participantService.haveICameraAndScreenActive()) {
if (participant.hasCameraAndScreenActives()) {
const webcamSessionId = await this.openviduService.connectWebcamSession(participantId, nickname); const webcamSessionId = await this.openviduService.connectWebcamSession(participantId, nickname);
if (webcamSessionId) this.participantService.setMyCameraConnectionId(webcamSessionId); if (webcamSessionId) this.participantService.setMyCameraConnectionId(webcamSessionId);
@ -266,10 +268,9 @@ export class SessionComponent implements OnInit, OnDestroy {
const screenSessionId = await this.openviduService.connectScreenSession(participantId, nickname); const screenSessionId = await this.openviduService.connectScreenSession(participantId, nickname);
if (screenSessionId) this.participantService.setMyScreenConnectionId(screenSessionId); if (screenSessionId) this.participantService.setMyScreenConnectionId(screenSessionId);
await this.openviduService.publishCamera(cameraPublisher); await this.openviduService.publishCamera(cameraPublisher);
await this.openviduService.publishScreen(screenPublisher); await this.openviduService.publishScreen(screenPublisher);
} else if (this.participantService.isOnlyMyScreenActive()) { } else if (participant.hasOnlyScreenActive()) {
await this.openviduService.connectScreenSession(participantId, nickname); await this.openviduService.connectScreenSession(participantId, nickname);
await this.openviduService.publishScreen(screenPublisher); await this.openviduService.publishScreen(screenPublisher);
} else { } else {

View File

@ -218,7 +218,6 @@ export abstract class ParticipantAbstractModel {
*/ */
isLocal(): boolean { isLocal(): boolean {
return this.local; return this.local;
// return Array.from(this.streams.values()).every((conn) => conn.local);
} }
/** /**
@ -307,6 +306,30 @@ export abstract class ParticipantAbstractModel {
if (screenConnection) screenConnection.connected = false; if (screenConnection) screenConnection.connected = false;
} }
/**
* @internal
* @returns true if both camera and screen are active
*/
hasCameraAndScreenActives(): boolean {
return this.isCameraActive() && this.isScreenActive();
}
/**
* @internal
* @returns true if only screen is active
*/
hasOnlyScreenActive(): boolean {
return this.isScreenActive() && !this.isCameraActive();
}
/**
* @internal
* @returns true if only camera is active
*/
hasOnlyCameraActive(): boolean {
return this.isCameraActive() && !this.isScreenActive();
}
/** /**
* @internal * @internal
*/ */

View File

@ -76,12 +76,12 @@ export class ParticipantService {
const screenPublisher = this.getMyScreenPublisher(); const screenPublisher = this.getMyScreenPublisher();
// Disabling webcam // Disabling webcam
if (this.haveICameraAndScreenActive()) { if (this.localParticipant.hasCameraAndScreenActives()) {
await this.publishVideoAux(cameraPublisher, publish); await this.publishVideoAux(cameraPublisher, publish);
this.disableWebcamStream(); this.disableWebcamStream();
this.openviduService.unpublishCamera(cameraPublisher); this.openviduService.unpublishCamera(cameraPublisher);
this.publishAudioAux(screenPublisher, publishAudio); this.publishAudioAux(screenPublisher, publishAudio);
} else if (this.isOnlyMyScreenActive()) { } else if (this.localParticipant.hasOnlyScreenActive()) {
// Enabling webcam // Enabling webcam
const hasAudio = this.hasScreenAudioActive(); const hasAudio = this.hasScreenAudioActive();
const sessionId = await this.openviduService.connectWebcamSession(this.getMyNickname(), this.getLocalParticipant().id); const sessionId = await this.openviduService.connectWebcamSession(this.getMyNickname(), this.getLocalParticipant().id);
@ -106,7 +106,7 @@ export class ParticipantService {
*/ */
publishAudio(publish: boolean): void { publishAudio(publish: boolean): void {
if (this.isMyCameraActive()) { if (this.isMyCameraActive()) {
if (this.isMyScreenActive() && this.hasScreenAudioActive()) { if (this.localParticipant.isScreenActive() && this.hasScreenAudioActive()) {
this.publishAudioAux(this.getMyScreenPublisher(), false); this.publishAudioAux(this.getMyScreenPublisher(), false);
} }
@ -129,12 +129,12 @@ export class ParticipantService {
const participantNickname = this.getMyNickname(); const participantNickname = this.getMyNickname();
const participantId = this.getLocalParticipant().id; const participantId = this.getLocalParticipant().id;
if (this.haveICameraAndScreenActive()) { if (this.localParticipant.hasCameraAndScreenActives()) {
// Disabling screenShare // Disabling screenShare
this.disableScreenStream(); this.disableScreenStream();
this.updateLocalParticipant(); this.updateLocalParticipant();
this.openviduService.unpublishScreen(screenPublisher); this.openviduService.unpublishScreen(screenPublisher);
} else if (this.isOnlyMyCameraActive()) { } else if (this.localParticipant.hasOnlyCameraActive()) {
// I only have the camera published // I only have the camera published
const willWebcamBePresent = this.isMyCameraActive() && this.isMyVideoActive(); const willWebcamBePresent = this.isMyCameraActive() && this.isMyVideoActive();
const hasAudio = willWebcamBePresent ? false : this.isMyAudioActive(); const hasAudio = willWebcamBePresent ? false : this.isMyAudioActive();
@ -336,34 +336,6 @@ export class ParticipantService {
return this.localParticipant?.hasAudioActive(); return this.localParticipant?.hasAudioActive();
} }
/**
* @internal
*/
isMyScreenActive(): boolean {
return this.localParticipant.isScreenActive();
}
/**
* @internal
*/
isOnlyMyCameraActive(): boolean {
return this.isMyCameraActive() && !this.isMyScreenActive();
}
/**
* @internal
*/
isOnlyMyScreenActive(): boolean {
return this.isMyScreenActive() && !this.isMyCameraActive();
}
/**
* @internal
*/
haveICameraAndScreenActive(): boolean {
return this.isMyCameraActive() && this.isMyScreenActive();
}
/** /**
* @internal * @internal
*/ */