diff --git a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.css b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.css index 2657ce01..d57066f6 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.css +++ b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.css @@ -50,3 +50,7 @@ mat-radio-button:first-child { mat-form-field { margin-right: 9px; } + +#force-publishing-checkbox { + margin-right: 10px; +} \ No newline at end of file diff --git a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html index e340667f..0d49f036 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html +++ b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.html @@ -118,10 +118,13 @@ -
+
Force publishing + + Reconnection on server failure +
@@ -132,5 +135,5 @@ + [mat-dialog-close]="{sessionProperties: sessionProperties, turnConf: turnConf, manualTurnConf: manualTurnConf, customToken: customToken, forcePublishing: forcePublishing, reconnectionOnServerFailure: reconnectionOnServerFailure, connectionProperties: generateConnectionProperties()}">SAVE diff --git a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.ts b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.ts index 965fc831..453fae3d 100644 --- a/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.ts +++ b/openvidu-testapp/src/app/components/dialogs/session-properties-dialog/session-properties-dialog.component.ts @@ -15,6 +15,7 @@ export class SessionPropertiesDialogComponent { manualTurnConf: RTCIceServer = { urls: [] }; customToken: string; forcePublishing: boolean = false; + reconnectionOnServerFailure: boolean = false; connectionProperties: ConnectionProperties; forceVideoCodec = VideoCodec; @@ -33,6 +34,7 @@ export class SessionPropertiesDialogComponent { this.manualTurnConf = data.manualTurnConf; this.customToken = data.customToken; this.forcePublishing = data.forcePublishing; + this.reconnectionOnServerFailure = data.reconnectionOnServerFailure; this.connectionProperties = data.connectionProperties; } 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 d0c962a7..19c72af3 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 @@ -150,6 +150,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { manualTurnConf: RTCIceServer = { urls: [] }; customToken: string; forcePublishing: boolean; + reconnectionOnServerFailure: boolean; connectionProperties: ConnectionProperties = { role: OpenViduRole.PUBLISHER, record: true, @@ -448,12 +449,20 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { if (this.sessionEvents.sessionDisconnected !== oldValues.sessionDisconnected || firstTime) { this.session.off('sessionDisconnected'); if (this.sessionEvents.sessionDisconnected) { - this.session.on('sessionDisconnected', (event: SessionDisconnectedEvent) => { + this.session.on('sessionDisconnected', async (event: SessionDisconnectedEvent) => { this.updateEventList('sessionDisconnected', '', event); this.subscribers = []; delete this.publisher; delete this.session; delete this.OV; + + if (event.reason === 'nodeCrashed' && this.reconnectionOnServerFailure) { + console.warn('Reconnecting after node crash'); + await this.initializeNodeClient((event.target as Session).sessionId); + const connection: Connection = await this.createConnection(); + this.joinSessionShared(connection.token); + } + }); } } @@ -634,6 +643,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { manualTurnConf: this.manualTurnConf, customToken: this.customToken, forcePublishing: this.forcePublishing, + reconnectionOnServerFailure: this.reconnectionOnServerFailure, connectionProperties: this.connectionProperties, } }); @@ -648,6 +658,7 @@ export class OpenviduInstanceComponent implements OnInit, OnChanges, OnDestroy { this.manualTurnConf = result.manualTurnConf; this.customToken = result.customToken; this.forcePublishing = result.forcePublishing; + this.reconnectionOnServerFailure = result.reconnectionOnServerFailure; this.connectionProperties = result.connectionProperties; } document.getElementById('session-settings-btn-' + this.index).classList.remove('cdk-program-focused');