diff --git a/openvidu-testapp/src/app/components/dialogs/filter-dialog/filter-dialog.component.html b/openvidu-testapp/src/app/components/dialogs/filter-dialog/filter-dialog.component.html index bd7a5f8d..23fa0dcd 100644 --- a/openvidu-testapp/src/app/components/dialogs/filter-dialog/filter-dialog.component.html +++ b/openvidu-testapp/src/app/components/dialogs/filter-dialog/filter-dialog.component.html @@ -5,19 +5,19 @@ - + - + - + - + @@ -34,7 +34,7 @@

Filter events

- + diff --git a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.css b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.css index 7df97a20..5fc144c0 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.css +++ b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.css @@ -31,6 +31,7 @@ mat-dialog-content button { .inner-text-input { margin-left: 9px; + width: 42%; } #rec-properties-btn { diff --git a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html index cc50ca9d..a7ef54ed 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html +++ b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.html @@ -6,23 +6,44 @@ -
- - - -
- -
+ + + + + + + + +
+ Record + + + + + {{ enumerator }} + + + +
+
+ + + + +
+ -
@@ -37,7 +58,9 @@
-
+
@@ -45,17 +68,20 @@ - +
Has audio Has video - - + +
@@ -63,8 +89,10 @@
- - + +
@@ -73,6 +101,7 @@ - +
diff --git a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts index f1acab0e..2fffa7fd 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts +++ b/openvidu-testapp/src/app/components/dialogs/session-api-dialog/session-api-dialog.component.ts @@ -1,7 +1,7 @@ import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; -import { OpenVidu as OpenViduAPI, Session as SessionAPI, Recording, RecordingProperties, RecordingLayout } from 'openvidu-node-client'; +import { OpenVidu as OpenViduAPI, Session as SessionAPI, Recording, RecordingProperties, RecordingLayout, TokenOptions, OpenViduRole } from 'openvidu-node-client'; @Component({ selector: 'app-session-api-dialog', @@ -14,16 +14,23 @@ export class SessionApiDialogComponent { session: SessionAPI; sessionId: string; recordingId: string; - resourceId: string; + connectionId: string; + streamId: string; response: string; recordingProperties: RecordingProperties; recMode = Recording.OutputMode; recLayouts = RecordingLayout; + openviduRoles = OpenViduRole; customLayout = ''; recPropertiesIcon = 'add_circle'; showRecProperties = false; + tokenOptions: TokenOptions = { + record: true, + role: OpenViduRole.PUBLISHER + }; + constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data) { this.OV = data.openVidu; @@ -145,7 +152,7 @@ export class SessionApiDialogComponent { forceDisconnect() { console.log('Forcing disconnect'); - this.session.forceDisconnect(this.resourceId) + this.session.forceDisconnect(this.connectionId) .then(() => { this.response = 'User disconnected'; }) @@ -156,7 +163,7 @@ export class SessionApiDialogComponent { forceUnpublish() { console.log('Forcing unpublish'); - this.session.forceUnpublish(this.resourceId) + this.session.forceUnpublish(this.streamId) .then(() => { this.response = 'Stream unpublished'; }) @@ -165,6 +172,17 @@ export class SessionApiDialogComponent { }); } + updateConnection() { + console.log('Updating connection'); + this.session.updateConnection(this.connectionId, this.tokenOptions) + .then(modifiedConnection => { + this.response = 'Connection updated: ' + JSON.stringify({ role: modifiedConnection.role, record: modifiedConnection.record }); + }) + .catch(error => { + this.response = 'Error [' + error.message + ']'; + }); + } + enumToArray(enumerator: any) { return Object.keys(enumerator); } diff --git a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts index 9eb3a466..daea942c 100644 --- a/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts +++ b/openvidu-testapp/src/app/components/openvidu-instance/openvidu-instance.component.ts @@ -4,7 +4,7 @@ import { } from '@angular/core'; import { - OpenVidu, Session, Subscriber, Publisher, Event, VideoInsertMode, StreamEvent, ConnectionEvent, + OpenVidu, Session, Subscriber, Publisher, Event, StreamEvent, ConnectionEvent, SessionDisconnectedEvent, SignalEvent, RecordingEvent, PublisherSpeakingEvent, PublisherProperties, StreamPropertyChangedEvent, OpenViduError } from 'openvidu-browser'; @@ -18,7 +18,8 @@ import { TokenOptions, OpenViduRole, RecordingProperties, - Recording + Recording, + Token } from 'openvidu-node-client'; import { MatDialog, MAT_CHECKBOX_CLICK_ACTION } from '@angular/material'; import { ExtensionDialogComponent } from '../dialogs/extension-dialog/extension-dialog.component'; @@ -189,22 +190,21 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.clientData = 'TestClient'; } - joinSession(): void { - + async joinSession(): Promise { if (this.session) { this.leaveSession(); } - + const sessionId = !!this.customToken ? this.getSessionIdFromToken(this.customToken) : this.sessionName; + await this.initializeNodeClient(sessionId); if (!!this.customToken) { this.joinSessionShared(this.customToken); } else { - this.getToken().then(token => { - this.joinSessionShared(token); - }); + const token: Token = await this.getToken(); + this.joinSessionShared(token.token); } } - private joinSessionShared(token): void { + private joinSessionShared(token: string): void { this.OV = new OpenVidu(); @@ -686,16 +686,14 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { }); } - getToken(): Promise { + async initializeNodeClient(sessionId: string): Promise { this.OV_NodeClient = new OpenViduAPI(this.openviduUrl, this.openviduSecret); - if (!this.sessionProperties.customSessionId) { - this.sessionProperties.customSessionId = this.sessionName; - } - return this.OV_NodeClient.createSession(this.sessionProperties) - .then(session_NodeClient => { - this.sessionAPI = session_NodeClient; - return session_NodeClient.generateToken(this.tokenOptions); - }); + this.sessionProperties.customSessionId = sessionId; + this.sessionAPI = await this.OV_NodeClient.createSession(this.sessionProperties); + } + + async getToken(): Promise { + return this.sessionAPI.createToken(); } updateEventFromChild(event: OpenViduEvent) { @@ -728,4 +726,15 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.syncInitPublisher(); } + private getSessionIdFromToken(token: string): string { + const queryParams = decodeURI(token.split('?')[1]) + .split('&') + .map(param => param.split('=')) + .reduce((values, [key, value]) => { + values[key] = value + return values + }, {}); + return queryParams['sessionId']; + } + }