mirror of https://github.com/OpenVidu/openvidu.git
openvidu-testapp: Session API REST options extended
parent
59a7e497ca
commit
56e75a9b81
|
@ -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 + ']';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue