openvidu-testapp: Session API REST options extended

pull/87/merge
pabloFuente 2018-07-22 22:54:36 +02:00
parent 59a7e497ca
commit 56e75a9b81
2 changed files with 74 additions and 5 deletions

View File

@ -9,18 +9,26 @@ import { OpenVidu as OpenViduAPI, Session as SessionAPI } from 'openvidu-node-cl
<div> <div>
<h2 mat-dialog-title>API REST</h2> <h2 mat-dialog-title>API REST</h2>
<mat-dialog-content> <mat-dialog-content>
<button mat-button id="close-session-btn" (click)="closeSession()">Close session</button> <label class="label">Sessions</label>
<button mat-button id="list-sessions-btn" (click)="fetchActiveConnections()">Fetch</button>
<button mat-button id="list-sessions-btn" (click)="fetchActiveSessions()">Fetch all</button>
<button mat-button id="close-session-btn" (click)="closeSession()">Close this session</button>
<mat-form-field class="inner-text-input">
<input matInput id="session-id-field" placeholder="resourceId" [(ngModel)]="resourceId">
</mat-form-field>
<button mat-button id="force-disconnet-api-btn" (click)="forceDisconnect()" [disabled]="!resourceId">Force disconnect</button>
<button mat-button id="force-unpublish-api-btn" (click)="forceUnpublish()" [disabled]="!resourceId">Force unpublish</button>
<mat-divider></mat-divider> <mat-divider></mat-divider>
<label class="label">Recordings</label>
<button mat-button id="start-recording-btn" (click)="startRecording()">Start recording</button> <button mat-button id="start-recording-btn" (click)="startRecording()">Start recording</button>
<button mat-button id="list-recording-btn" (click)="listRecordings()">List recordings</button> <button mat-button id="list-recording-btn" (click)="listRecordings()">List recordings</button>
<mat-divider></mat-divider> <mat-form-field class="inner-text-input">
<mat-form-field>
<input matInput id="recording-id-field" placeholder="recordingId" [(ngModel)]="recordingId"> <input matInput id="recording-id-field" placeholder="recordingId" [(ngModel)]="recordingId">
</mat-form-field> </mat-form-field>
<button mat-button id="stop-recording-btn" (click)="stopRecording()" [disabled]="!recordingId">Stop recording</button> <button mat-button id="stop-recording-btn" (click)="stopRecording()" [disabled]="!recordingId">Stop recording</button>
<button mat-button id="get-recording-btn" (click)="getRecording()" [disabled]="!recordingId">Get recording</button> <button mat-button id="get-recording-btn" (click)="getRecording()" [disabled]="!recordingId">Get recording</button>
<button mat-button id="delete-recording-btn" (click)="deleteRecording()" [disabled]="!recordingId">Delete recording</button> <button mat-button id="delete-recording-btn" (click)="deleteRecording()" [disabled]="!recordingId">Delete recording</button>
<mat-form-field *ngIf="!!response" id="response-text-area"> <mat-form-field *ngIf="!!response" id="response-text-area" appearance="fill">
<textarea id="api-response-text-area" [(ngModel)]="response" matInput readonly></textarea> <textarea id="api-response-text-area" [(ngModel)]="response" matInput readonly></textarea>
</mat-form-field> </mat-form-field>
</mat-dialog-content> </mat-dialog-content>
@ -33,6 +41,9 @@ import { OpenVidu as OpenViduAPI, Session as SessionAPI } from 'openvidu-node-cl
'#response-text-area { width: 100%; color: #808080; }', '#response-text-area { width: 100%; color: #808080; }',
'#response-text-area textarea { resize: none; }', '#response-text-area textarea { resize: none; }',
'mat-dialog-content button, mat-divider { margin-bottom: 5px; }', 'mat-dialog-content button, mat-divider { margin-bottom: 5px; }',
'mat-dialog-content button { height: 30px; line-height: 30px; padding-left: 12px; padding-right: 12px; display: inline-flex;}',
'.label { display: block; font-size: 12px; color: rgba(0, 0, 0, 0.54); font-weight: 400; margin-bottom: 5px; margin-top: 13px}',
'.inner-text-input { margin-left: 16px; }'
] ]
}) })
export class SessionApiDialogComponent { export class SessionApiDialogComponent {
@ -41,6 +52,7 @@ export class SessionApiDialogComponent {
session: SessionAPI; session: SessionAPI;
sessionId: string; sessionId: string;
recordingId: string; recordingId: string;
resourceId: string;
response: string; response: string;
constructor(public dialogRef: MatDialogRef<SessionApiDialogComponent>, constructor(public dialogRef: MatDialogRef<SessionApiDialogComponent>,
@ -128,4 +140,59 @@ export class SessionApiDialogComponent {
}); });
} }
fetchActiveConnections() {
console.log('Fetching session info');
if (!this.session) {
this.response = 'Error [Session undefined]';
return;
}
this.session.fetch()
.then(anyChange => {
const resp = {};
this.session.activeConnections.forEach(con => {
resp[con.connectionId] = [];
con.publishers.forEach(pub => {
resp[con.connectionId].push(pub);
});
});
this.response = 'Session info fetched [' + JSON.stringify(resp) + ']. Changes: ' + anyChange;
})
.catch(error => {
this.response = 'Error [' + error.message + ']';
});
}
fetchActiveSessions() {
console.log('Fetching all sessions info');
this.OV.fetch()
.then(anyChange => {
this.response = 'All sessions info fetched. Changes: ' + anyChange;
})
.catch(error => {
this.response = 'Error [' + error.message + ']';
});
}
forceDisconnect() {
console.log('Forcing disconnect');
this.session.forceDisconnect(this.resourceId)
.then(() => {
this.response = 'User disconnected';
})
.catch(error => {
this.response = 'Error [' + error.message + ']';
});
}
forceUnpublish() {
console.log('Forcing unpublish');
this.session.forceUnpublish(this.resourceId)
.then(() => {
this.response = 'Stream unpublished';
})
.catch(error => {
this.response = 'Error [' + error.message + ']';
});
}
} }

View File

@ -403,7 +403,9 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy {
} }
if (this.sessionEvents.publisherStopSpeaking !== oldValues.publisherStopSpeaking || firstTime) { if (this.sessionEvents.publisherStopSpeaking !== oldValues.publisherStopSpeaking || firstTime) {
if (!this.sessionEvents.publisherStartSpeaking) {
this.session.off('publisherStopSpeaking'); this.session.off('publisherStopSpeaking');
}
if (this.sessionEvents.publisherStopSpeaking) { if (this.sessionEvents.publisherStopSpeaking) {
this.session.on('publisherStopSpeaking', (event: PublisherSpeakingEvent) => { this.session.on('publisherStopSpeaking', (event: PublisherSpeakingEvent) => {
this.updateEventList('publisherStopSpeaking', event.connection.connectionId); this.updateEventList('publisherStopSpeaking', event.connection.connectionId);