openvidu-testapp: Session.forceUnpublish and Session.forceDisconnect update

pull/88/merge
pabloFuente 2018-07-09 16:29:21 +02:00
parent a3849098a3
commit c67e98aec5
7 changed files with 53 additions and 13 deletions

View File

@ -7,7 +7,7 @@ mat-radio-button:first-child {
margin-left: 0; margin-left: 0;
} }
#turn-conf-label { .label {
display: block; display: block;
font-size: 12px; font-size: 12px;
color: rgba(0, 0, 0, 0.54); color: rgba(0, 0, 0, 0.54);
@ -15,9 +15,8 @@ mat-radio-button:first-child {
margin-bottom: 5px; margin-bottom: 5px;
} }
.not-manual { #turn-div {
padding-top: 6px; padding-bottom: 1.25em;
padding-bottom: 15px;
} }
#manual-turn-div { #manual-turn-div {
@ -26,3 +25,8 @@ mat-radio-button:first-child {
border: 1px solid #00000026; border: 1px solid #00000026;
border-radius: 3px; border-radius: 3px;
} }
#role-div {
padding-top: 6px;
padding-bottom: 15px;
}

View File

@ -28,8 +28,8 @@
<mat-form-field> <mat-form-field>
<input matInput placeholder="CustomSessionId" [(ngModel)]="sessionProperties.customSessionId"> <input matInput placeholder="CustomSessionId" [(ngModel)]="sessionProperties.customSessionId">
</mat-form-field> </mat-form-field>
<label id="turn-conf-label">Turn configuration</label> <label class="label">Turn configuration</label>
<div [class.not-manual]="turnConf !== 'manual'"> <div id="turn-div">
<mat-radio-group name="Turn configuration" [(ngModel)]="turnConf"> <mat-radio-group name="Turn configuration" [(ngModel)]="turnConf">
<mat-radio-button value="auto">Auto</mat-radio-button> <mat-radio-button value="auto">Auto</mat-radio-button>
<mat-radio-button value="freeice">Freeice</mat-radio-button> <mat-radio-button value="freeice">Freeice</mat-radio-button>
@ -47,9 +47,20 @@
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>
<label class="label">Role</label>
<div id="role-div">
<mat-radio-group name="Role" [(ngModel)]="participantRole">
<mat-radio-button value="SUBSCRIBER">SUB</mat-radio-button>
<mat-radio-button value="PUBLISHER">PUB</mat-radio-button>
<mat-radio-button value="MODERATOR">MOD</mat-radio-button>
</mat-radio-group>
</div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions> <mat-dialog-actions>
<button mat-button [mat-dialog-close]="undefined">CANCEL</button> <button mat-button [mat-dialog-close]="undefined">CANCEL</button>
<button mat-button [mat-dialog-close]="{sessionProperties: sessionProperties, turnConf: turnConf, manualTurnConf: manualTurnConf}">SAVE</button> <button mat-button [mat-dialog-close]="{sessionProperties: sessionProperties, turnConf: turnConf, manualTurnConf: manualTurnConf, participantRole: participantRole}">SAVE</button>
</mat-dialog-actions> </mat-dialog-actions>
</div> </div>

View File

@ -13,6 +13,7 @@ export class SessionPropertiesDialogComponent {
sessionProperties: SessionProperties; sessionProperties: SessionProperties;
turnConf: string; turnConf: string;
manualTurnConf: RTCIceServer = {}; manualTurnConf: RTCIceServer = {};
participantRole: string;
mediaMode = MediaMode; mediaMode = MediaMode;
recordingMode = RecordingMode; recordingMode = RecordingMode;
@ -23,6 +24,7 @@ export class SessionPropertiesDialogComponent {
this.sessionProperties = data.sessionProperties; this.sessionProperties = data.sessionProperties;
this.turnConf = data.turnConf; this.turnConf = data.turnConf;
this.manualTurnConf = data.manualTurnConf; this.manualTurnConf = data.manualTurnConf;
this.participantRole = data.participantRole;
} }
enumToArray(enumerator: any) { enumToArray(enumerator: any) {

View File

@ -78,7 +78,7 @@
<div fxLayout="column" class="publisher-btns-div"> <div fxLayout="column" class="publisher-btns-div">
<button mat-icon-button title="Publisher properties" [id]="'publisher-settings-btn-' + index" class="mat-icon-custom" (click)="openPublisherPropertiesDialog()" <button mat-icon-button title="Publisher properties" [id]="'publisher-settings-btn-' + index" class="mat-icon-custom" (click)="openPublisherPropertiesDialog()"
[disabled]="!publishTo"> [disabled]="!publishTo">
<mat-icon class="mat-icon-custom-ic" aria-label="Session properties button">settings</mat-icon> <mat-icon class="mat-icon-custom-ic" aria-label="Publisher properties button">settings</mat-icon>
</button> </button>
<button mat-icon-button title="Add new publisher to running session" [id]="'session-api-btn-' + index" class="mat-icon-custom" <button mat-icon-button title="Add new publisher to running session" [id]="'session-api-btn-' + index" class="mat-icon-custom"
[disabled]="!session || !publishTo"> [disabled]="!session || !publishTo">

View File

@ -6,14 +6,15 @@ import {
import { import {
OpenVidu, Session, Subscriber, Publisher, VideoInsertMode, StreamEvent, ConnectionEvent, OpenVidu, Session, Subscriber, Publisher, VideoInsertMode, StreamEvent, ConnectionEvent,
SessionDisconnectedEvent, SignalEvent, RecordingEvent, SessionDisconnectedEvent, SignalEvent, RecordingEvent,
PublisherSpeakingEvent, PublisherProperties, StreamPropertyChangedEvent PublisherSpeakingEvent, PublisherProperties, StreamPropertyChangedEvent, OpenViduError
} from 'openvidu-browser'; } from 'openvidu-browser';
import { import {
OpenVidu as OpenViduAPI, OpenVidu as OpenViduAPI,
SessionProperties as SessionPropertiesAPI, SessionProperties as SessionPropertiesAPI,
MediaMode, MediaMode,
RecordingMode, RecordingMode,
RecordingLayout RecordingLayout,
OpenViduRole
} from 'openvidu-node-client'; } from 'openvidu-node-client';
import { MatDialog, MAT_CHECKBOX_CLICK_ACTION } from '@angular/material'; import { MatDialog, MAT_CHECKBOX_CLICK_ACTION } from '@angular/material';
import { ExtensionDialogComponent } from '../dialogs/extension-dialog/extension-dialog.component'; import { ExtensionDialogComponent } from '../dialogs/extension-dialog/extension-dialog.component';
@ -111,6 +112,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
turnConf = 'auto'; turnConf = 'auto';
manualTurnConf: RTCIceServer = { urls: [] }; manualTurnConf: RTCIceServer = { urls: [] };
participantRole: OpenViduRole = OpenViduRole.PUBLISHER;
events: OpenViduEvent[] = []; events: OpenViduEvent[] = [];
@ -430,7 +432,10 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
this.publisher.subscribeToRemote(); this.publisher.subscribeToRemote();
} }
this.session.publish(this.publisher); this.session.publish(this.publisher).catch((error: OpenViduError) => {
console.error(error);
this.session.unpublish(this.publisher);
});
} }
syncSubscribe(session: Session, event) { syncSubscribe(session: Session, event) {
@ -483,7 +488,8 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
data: { data: {
sessionProperties: this.sessionProperties, sessionProperties: this.sessionProperties,
turnConf: this.turnConf, turnConf: this.turnConf,
manualTurnConf: this.manualTurnConf manualTurnConf: this.manualTurnConf,
participantRole: this.participantRole
}, },
width: '280px' width: '280px'
}); });
@ -496,6 +502,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
} }
this.turnConf = result.turnConf; this.turnConf = result.turnConf;
this.manualTurnConf = result.manualTurnConf; this.manualTurnConf = result.manualTurnConf;
this.participantRole = result.participantRole;
} }
document.getElementById('session-settings-btn-' + this.index).classList.remove('cdk-program-focused'); document.getElementById('session-settings-btn-' + this.index).classList.remove('cdk-program-focused');
}); });
@ -588,7 +595,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
} }
return OV_NodeClient.createSession(this.sessionProperties) return OV_NodeClient.createSession(this.sessionProperties)
.then(session_NodeClient => { .then(session_NodeClient => {
return session_NodeClient.generateToken(); return session_NodeClient.generateToken({ role: this.participantRole });
}); });
} }

View File

@ -47,6 +47,14 @@
<button *ngIf="streamManager.stream.hasAudio && !!pubSubAudioIcon" class="video-btn sub-audio-btn" title="Subscribe/Unsubscribe Audio" (click)="subUnsubAudio()"> <button *ngIf="streamManager.stream.hasAudio && !!pubSubAudioIcon" class="video-btn sub-audio-btn" title="Subscribe/Unsubscribe Audio" (click)="subUnsubAudio()">
<mat-icon aria-label="Subscribe or unsubscribe audio" class="mat-icon material-icons" role="img" aria-hidden="true">{{pubSubAudioIcon}}</mat-icon> <mat-icon aria-label="Subscribe or unsubscribe audio" class="mat-icon material-icons" role="img" aria-hidden="true">{{pubSubAudioIcon}}</mat-icon>
</button> </button>
<button *ngIf="OV.session.capabilities.forceUnpublish" class="video-btn force-unpub-btn" title="Force Unpublish" (click)="forceUnpublish()">
<mat-icon aria-label="Force unpublish" class="mat-icon material-icons" role="img" aria-hidden="true">voice_over_off</mat-icon>
</button>
<button *ngIf="OV.session.capabilities.forceDisconnect" class="video-btn force-disconnect-btn" title="Force Disconnect" (click)="forceDisconnect()">
<mat-icon aria-label="Force disconnect" class="mat-icon material-icons" role="img" aria-hidden="true">clear</mat-icon>
</button>
<button *ngIf="!!recordIcon" class="video-btn rec-btn" title="Record" (click)="record()"> <button *ngIf="!!recordIcon" class="video-btn rec-btn" title="Record" (click)="record()">
<mat-icon aria-label="Start/Stop recording" class="mat-icon material-icons" role="img" aria-hidden="true">{{recordIcon}}</mat-icon> <mat-icon aria-label="Start/Stop recording" class="mat-icon material-icons" role="img" aria-hidden="true">{{recordIcon}}</mat-icon>
</button> </button>

View File

@ -613,4 +613,12 @@ export class VideoComponent implements OnInit, OnDestroy {
} }
} }
forceUnpublish() {
this.OV.session.forceUnpublish(this.streamManager.stream);
}
forceDisconnect() {
this.OV.session.forceDisconnect(this.streamManager.stream.connection);
}
} }