openvidu-browser: ensure Promise return on every resolve and reject

pull/690/head
pabloFuente 2022-01-26 12:17:31 +01:00
parent e9e3bbaf09
commit ad8e8938d4
8 changed files with 160 additions and 196 deletions

View File

@ -99,7 +99,7 @@ export class Filter {
} catch (error) { } catch (error) {
const errorMsg = "'params' property must be a JSON formatted object"; const errorMsg = "'params' property must be a JSON formatted object";
logger.error(errorMsg); logger.error(errorMsg);
reject(errorMsg); return reject(errorMsg);
} }
} else { } else {
stringParams = <string>params; stringParams = <string>params;
@ -111,9 +111,9 @@ export class Filter {
if (error) { if (error) {
logger.error('Error executing filter method for Stream ' + this.stream.streamId, error); logger.error('Error executing filter method for Stream ' + this.stream.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to execute a filter method")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to execute a filter method"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
logger.info('Filter method successfully executed on Stream ' + this.stream.streamId); logger.info('Filter method successfully executed on Stream ' + this.stream.streamId);
@ -121,7 +121,7 @@ export class Filter {
this.stream.filter!.lastExecMethod = { method, params: JSON.parse(stringParams) }; this.stream.filter!.lastExecMethod = { method, params: JSON.parse(stringParams) };
this.stream.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.stream.session, this.stream, 'filter', this.stream.filter!, oldValue, 'execFilterMethod')]); this.stream.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.stream.session, this.stream, 'filter', this.stream.filter!, oldValue, 'execFilterMethod')]);
this.stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.stream.streamManager, this.stream, 'filter', this.stream.filter!, oldValue, 'execFilterMethod')]); this.stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.stream.streamManager, this.stream, 'filter', this.stream.filter!, oldValue, 'execFilterMethod')]);
resolve(); return resolve();
} }
} }
); );
@ -147,14 +147,14 @@ export class Filter {
if (error) { if (error) {
logger.error('Error adding filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error); logger.error('Error adding filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to add a filter event listener")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to add a filter event listener"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
this.handlers.set(eventType, handler); this.handlers.set(eventType, handler);
logger.info('Filter event listener to event ' + eventType + ' successfully applied on Stream ' + this.stream.streamId); logger.info('Filter event listener to event ' + eventType + ' successfully applied on Stream ' + this.stream.streamId);
resolve(); return resolve();
} }
} }
); );
@ -179,14 +179,14 @@ export class Filter {
if (error) { if (error) {
logger.error('Error removing filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error); logger.error('Error removing filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to add a filter event listener")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to add a filter event listener"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
this.handlers.delete(eventType); this.handlers.delete(eventType);
logger.info('Filter event listener to event ' + eventType + ' successfully removed on Stream ' + this.stream.streamId); logger.info('Filter event listener to event ' + eventType + ' successfully removed on Stream ' + this.stream.streamId);
resolve(); return resolve();
} }
} }
); );

View File

@ -90,7 +90,7 @@ export class LocalRecorder {
if (typeof MediaRecorder.isTypeSupported === 'function') { if (typeof MediaRecorder.isTypeSupported === 'function') {
if (!!mimeType) { if (!!mimeType) {
if (!MediaRecorder.isTypeSupported(mimeType)) { if (!MediaRecorder.isTypeSupported(mimeType)) {
reject(new Error('mimeType "' + mimeType + '" is not supported')); return reject(new Error('mimeType "' + mimeType + '" is not supported'));
} }
options = { mimeType }; options = { mimeType };
} else { } else {
@ -104,7 +104,7 @@ export class LocalRecorder {
this.mediaRecorder.start(10); this.mediaRecorder.start(10);
} catch (err) { } catch (err) {
reject(err); return reject(err);
} }
this.mediaRecorder.ondataavailable = (e) => { this.mediaRecorder.ondataavailable = (e) => {
@ -136,7 +136,7 @@ export class LocalRecorder {
}; };
this.state = LocalRecorderState.RECORDING; this.state = LocalRecorderState.RECORDING;
resolve(); return resolve();
}); });
} }
@ -154,11 +154,11 @@ export class LocalRecorder {
} }
this.mediaRecorder.onstop = () => { this.mediaRecorder.onstop = () => {
this.onStopDefault(); this.onStopDefault();
resolve(); return resolve();
}; };
this.mediaRecorder.stop(); this.mediaRecorder.stop();
} catch (e) { } catch (e) {
reject(e); return reject(e);
} }
}); });
} }
@ -172,13 +172,13 @@ export class LocalRecorder {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
try { try {
if (this.state !== LocalRecorderState.RECORDING) { if (this.state !== LocalRecorderState.RECORDING) {
reject(Error('\'LocalRecord.pause()\' needs \'LocalRecord.state\' to be \'RECORDING\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.start()\' or \'LocalRecorder.resume()\' before')); return reject(Error('\'LocalRecord.pause()\' needs \'LocalRecord.state\' to be \'RECORDING\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.start()\' or \'LocalRecorder.resume()\' before'));
} }
this.mediaRecorder.pause(); this.mediaRecorder.pause();
this.state = LocalRecorderState.PAUSED; this.state = LocalRecorderState.PAUSED;
resolve(); return resolve();
} catch (error) { } catch (error) {
reject(error); return reject(error);
} }
}); });
} }
@ -195,9 +195,9 @@ export class LocalRecorder {
} }
this.mediaRecorder.resume(); this.mediaRecorder.resume();
this.state = LocalRecorderState.RECORDING; this.state = LocalRecorderState.RECORDING;
resolve(); return resolve();
} catch (error) { } catch (error) {
reject(error); return reject(error);
} }
}); });
} }
@ -300,7 +300,7 @@ export class LocalRecorder {
uploadAsBinary(endpoint: string, headers?: any): Promise<any> { uploadAsBinary(endpoint: string, headers?: any): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.state !== LocalRecorderState.FINISHED) { if (this.state !== LocalRecorderState.FINISHED) {
reject(Error('\'LocalRecord.uploadAsBinary()\' needs \'LocalRecord.state\' to be \'FINISHED\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.stop()\' before')); return reject(Error('\'LocalRecord.uploadAsBinary()\' needs \'LocalRecord.state\' to be \'FINISHED\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.stop()\' before'));
} else { } else {
const http = new XMLHttpRequest(); const http = new XMLHttpRequest();
http.open('POST', endpoint, true); http.open('POST', endpoint, true);
@ -315,9 +315,9 @@ export class LocalRecorder {
if (http.readyState === 4) { if (http.readyState === 4) {
if (http.status.toString().charAt(0) === '2') { if (http.status.toString().charAt(0) === '2') {
// Success response from server (HTTP status standard: 2XX is success) // Success response from server (HTTP status standard: 2XX is success)
resolve(http.responseText); return resolve(http.responseText);
} else { } else {
reject(http.status); return reject(http.status);
} }
} }
}; };
@ -340,7 +340,7 @@ export class LocalRecorder {
uploadAsMultipartfile(endpoint: string, headers?: any): Promise<any> { uploadAsMultipartfile(endpoint: string, headers?: any): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.state !== LocalRecorderState.FINISHED) { if (this.state !== LocalRecorderState.FINISHED) {
reject(Error('\'LocalRecord.uploadAsMultipartfile()\' needs \'LocalRecord.state\' to be \'FINISHED\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.stop()\' before')); return reject(Error('\'LocalRecord.uploadAsMultipartfile()\' needs \'LocalRecord.state\' to be \'FINISHED\' (current value: \'' + this.state + '\'). Call \'LocalRecorder.stop()\' before'));
} else { } else {
const http = new XMLHttpRequest(); const http = new XMLHttpRequest();
http.open('POST', endpoint, true); http.open('POST', endpoint, true);
@ -358,9 +358,9 @@ export class LocalRecorder {
if (http.readyState === 4) { if (http.readyState === 4) {
if (http.status.toString().charAt(0) === '2') { if (http.status.toString().charAt(0) === '2') {
// Success response from server (HTTP status standard: 2XX is success) // Success response from server (HTTP status standard: 2XX is success)
resolve(http.responseText); return resolve(http.responseText);
} else { } else {
reject(http.status); return reject(http.status);
} }
} }
}; };

View File

@ -272,9 +272,9 @@ export class OpenVidu {
const callback = (error: Error) => { const callback = (error: Error) => {
if (!!error) { if (!!error) {
reject(error); return reject(error);
} else { } else {
resolve(publisher); return resolve(publisher);
} }
}; };
@ -416,7 +416,7 @@ export class OpenVidu {
}); });
} }
}); });
resolve(devices); return resolve(devices);
}); });
} else { } else {
@ -430,11 +430,11 @@ export class OpenVidu {
}); });
} }
}); });
resolve(devices); return resolve(devices);
} }
}).catch((error) => { }).catch((error) => {
logger.error('Error getting devices', error); logger.error('Error getting devices', error);
reject(error); return reject(error);
}); });
}); });
} }
@ -497,7 +497,7 @@ export class OpenVidu {
navigator.mediaDevices.getUserMedia(constraintsAux) navigator.mediaDevices.getUserMedia(constraintsAux)
.then(audioOnlyStream => { .then(audioOnlyStream => {
previousMediaStream.addTrack(audioOnlyStream.getAudioTracks()[0]); previousMediaStream.addTrack(audioOnlyStream.getAudioTracks()[0]);
resolve(previousMediaStream); return resolve(previousMediaStream);
}) })
.catch(error => { .catch(error => {
previousMediaStream.getAudioTracks().forEach((track) => { previousMediaStream.getAudioTracks().forEach((track) => {
@ -506,7 +506,7 @@ export class OpenVidu {
previousMediaStream.getVideoTracks().forEach((track) => { previousMediaStream.getVideoTracks().forEach((track) => {
track.stop(); track.stop();
}); });
reject(this.generateAudioDeviceError(error, constraintsAux)); return reject(this.generateAudioDeviceError(error, constraintsAux));
}); });
} }
@ -517,7 +517,7 @@ export class OpenVidu {
!!myConstraints.videoTrack && myConstraints.constraints?.audio === false) { !!myConstraints.videoTrack && myConstraints.constraints?.audio === false) {
// No need to call getUserMedia at all. Both tracks provided, or only AUDIO track provided or only VIDEO track provided // No need to call getUserMedia at all. Both tracks provided, or only AUDIO track provided or only VIDEO track provided
resolve(this.addAlreadyProvidedTracks(myConstraints, new MediaStream())); return resolve(this.addAlreadyProvidedTracks(myConstraints, new MediaStream()));
} else { } else {
// getUserMedia must be called. AUDIO or VIDEO are requesting a new track // getUserMedia must be called. AUDIO or VIDEO are requesting a new track
@ -547,13 +547,13 @@ export class OpenVidu {
askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints); askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
return; return;
} else { } else {
resolve(mediaStream); return resolve(mediaStream);
} }
}) })
.catch(error => { .catch(error => {
let errorName: OpenViduErrorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED; let errorName: OpenViduErrorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED;
const errorMessage = error.toString(); const errorMessage = error.toString();
reject(new OpenViduError(errorName, errorMessage)); return reject(new OpenViduError(errorName, errorMessage));
}); });
return; return;
} else { } else {
@ -572,7 +572,7 @@ export class OpenVidu {
askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints); askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
return; return;
} else { } else {
resolve(mediaStream); return resolve(mediaStream);
} }
}) })
.catch(error => { .catch(error => {
@ -583,12 +583,10 @@ export class OpenVidu {
} else { } else {
errorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED; errorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED;
} }
reject(new OpenViduError(errorName, errorMessage)); return reject(new OpenViduError(errorName, errorMessage));
}); });
} }
}).catch((error: OpenViduError) => { }).catch((error: OpenViduError) => reject(error));
reject(error);
});
}); });
} }
@ -697,7 +695,7 @@ export class OpenVidu {
} }
if (myConstraints.constraints!.audio === false && myConstraints.constraints!.video === false) { if (myConstraints.constraints!.audio === false && myConstraints.constraints!.video === false) {
// ERROR! audioSource and videoSource cannot be both false at the same time // ERROR! audioSource and videoSource cannot be both false at the same time
reject(new OpenViduError(OpenViduErrorName.NO_INPUT_SOURCE_SET, return reject(new OpenViduError(OpenViduErrorName.NO_INPUT_SOURCE_SET,
"Properties 'audioSource' and 'videoSource' cannot be set to false or null at the same time")); "Properties 'audioSource' and 'videoSource' cannot be set to false or null at the same time"));
} }
@ -749,7 +747,7 @@ export class OpenVidu {
// CASE 4: deviceId or screen sharing // CASE 4: deviceId or screen sharing
this.configureDeviceIdOrScreensharing(myConstraints, publisherProperties, resolve, reject); this.configureDeviceIdOrScreensharing(myConstraints, publisherProperties, resolve, reject);
resolve(myConstraints); return resolve(myConstraints);
}); });
} }
@ -919,7 +917,7 @@ export class OpenVidu {
if (!this.checkScreenSharingCapabilities()) { if (!this.checkScreenSharingCapabilities()) {
const error = new OpenViduError(OpenViduErrorName.SCREEN_SHARING_NOT_SUPPORTED, 'You can only screen share in desktop Chrome, Firefox, Opera, Safari (>=13.0), Edge (>= 80) or Electron. Detected client: ' + platform.getName() + ' ' + platform.getVersion()); const error = new OpenViduError(OpenViduErrorName.SCREEN_SHARING_NOT_SUPPORTED, 'You can only screen share in desktop Chrome, Firefox, Opera, Safari (>=13.0), Edge (>= 80) or Electron. Detected client: ' + platform.getName() + ' ' + platform.getVersion());
logger.error(error); logger.error(error);
reject(error); return reject(error);
} else { } else {
if (platform.isElectron()) { if (platform.isElectron()) {
@ -932,7 +930,7 @@ export class OpenVidu {
chromeMediaSourceId: electronScreenId chromeMediaSourceId: electronScreenId
} }
}; };
resolve(myConstraints); return resolve(myConstraints);
} else { } else {
@ -945,26 +943,26 @@ export class OpenVidu {
if (error === 'permission-denied' || error === 'PermissionDeniedError') { if (error === 'permission-denied' || error === 'PermissionDeniedError') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop'); const error = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop');
logger.error(error); logger.error(error);
reject(error); return reject(error);
} else { } else {
const extensionId = this.advancedConfiguration.screenShareChromeExtension!.split('/').pop()!!.trim(); const extensionId = this.advancedConfiguration.screenShareChromeExtension!.split('/').pop()!!.trim();
screenSharing.getChromeExtensionStatus(extensionId, status => { screenSharing.getChromeExtensionStatus(extensionId, status => {
if (status === 'installed-disabled') { if (status === 'installed-disabled') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension'); const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension');
logger.error(error); logger.error(error);
reject(error); return reject(error);
} }
if (status === 'not-installed') { if (status === 'not-installed') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, (<string>this.advancedConfiguration.screenShareChromeExtension)); const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, (<string>this.advancedConfiguration.screenShareChromeExtension));
logger.error(error); logger.error(error);
reject(error); return reject(error);
} }
}); });
return; return;
} }
} else { } else {
myConstraints.constraints!.video = screenConstraints; myConstraints.constraints!.video = screenConstraints;
resolve(myConstraints); return resolve(myConstraints);
} }
}); });
return; return;
@ -972,7 +970,7 @@ export class OpenVidu {
if (navigator.mediaDevices['getDisplayMedia']) { if (navigator.mediaDevices['getDisplayMedia']) {
// getDisplayMedia support (Chrome >= 72, Firefox >= 66, Safari >= 13) // getDisplayMedia support (Chrome >= 72, Firefox >= 66, Safari >= 13)
resolve(myConstraints); return resolve(myConstraints);
} else { } else {
// Default screen sharing extension for Chrome/Opera, or is Firefox < 66 // Default screen sharing extension for Chrome/Opera, or is Firefox < 66
const firefoxString = (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser()) ? publisherProperties.videoSource : undefined; const firefoxString = (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser()) ? publisherProperties.videoSource : undefined;
@ -984,24 +982,24 @@ export class OpenVidu {
'https://chrome.google.com/webstore/detail/openvidu-screensharing/lfcgfepafnobdloecchnfaclibenjold'; 'https://chrome.google.com/webstore/detail/openvidu-screensharing/lfcgfepafnobdloecchnfaclibenjold';
const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, extensionUrl); const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, extensionUrl);
logger.error(err); logger.error(err);
reject(err); return reject(err);
} else if (error === 'installed-disabled') { } else if (error === 'installed-disabled') {
const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension'); const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension');
logger.error(err); logger.error(err);
reject(err); return reject(err);
} else if (error === 'permission-denied') { } else if (error === 'permission-denied') {
const err = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop'); const err = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop');
logger.error(err); logger.error(err);
reject(err); return reject(err);
} else { } else {
const err = new OpenViduError(OpenViduErrorName.GENERIC_ERROR, 'Unknown error when accessing screen share'); const err = new OpenViduError(OpenViduErrorName.GENERIC_ERROR, 'Unknown error when accessing screen share');
logger.error(err); logger.error(err);
logger.error(error); logger.error(error);
reject(err); return reject(err);
} }
} else { } else {
myConstraints.constraints!.video = screenConstraints.video; myConstraints.constraints!.video = screenConstraints.video;
resolve(myConstraints); return resolve(myConstraints);
} }
}); });
return; return;

View File

@ -304,7 +304,7 @@ export class Publisher extends StreamManager {
this.openvidu.sendNewVideoDimensionsIfRequired(this, 'trackReplaced', 50, 30); this.openvidu.sendNewVideoDimensionsIfRequired(this, 'trackReplaced', 50, 30);
this.session.sendVideoData(this.stream.streamManager, 5, true, 5); this.session.sendVideoData(this.stream.streamManager, 5, true, 5);
} }
resolve(); return resolve();
}); });
} }
@ -315,24 +315,19 @@ export class Publisher extends StreamManager {
if (track.kind === 'video') { if (track.kind === 'video') {
sender = senders.find(s => !!s.track && s.track.kind === 'video'); sender = senders.find(s => !!s.track && s.track.kind === 'video');
if (!sender) { if (!sender) {
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); return reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object'));
return;
} }
} else if (track.kind === 'audio') { } else if (track.kind === 'audio') {
sender = senders.find(s => !!s.track && s.track.kind === 'audio'); sender = senders.find(s => !!s.track && s.track.kind === 'audio');
if (!sender) { if (!sender) {
reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object')); return reject(new Error('There\'s no replaceable track for that kind of MediaStreamTrack in this Publisher object'));
return;
} }
} else { } else {
reject(new Error('Unknown track kind ' + track.kind)); return reject(new Error('Unknown track kind ' + track.kind));
return;
} }
(sender as RTCRtpSender).replaceTrack(track).then(() => { (sender as RTCRtpSender).replaceTrack(track)
resolve(); .then(() => resolve())
}).catch(error => { .catch(error => reject(error));
reject(error);
});
}); });
} }
@ -376,7 +371,7 @@ export class Publisher extends StreamManager {
this.accessDenied = true; this.accessDenied = true;
this.accessAllowed = false; this.accessAllowed = false;
logger.error(`Publisher initialization failed. ${openViduError.name}: ${openViduError.message}`) logger.error(`Publisher initialization failed. ${openViduError.name}: ${openViduError.message}`)
reject(openViduError); return reject(openViduError);
}; };
const successCallback = (mediaStream: MediaStream) => { const successCallback = (mediaStream: MediaStream) => {
@ -448,7 +443,7 @@ export class Publisher extends StreamManager {
this.stream.isLocalStreamReadyToPublish = true; this.stream.isLocalStreamReadyToPublish = true;
this.stream.ee.emitEvent('stream-ready-to-publish', []); this.stream.ee.emitEvent('stream-ready-to-publish', []);
} }
resolve(); return resolve();
}; };
const getMediaSuccess = (mediaStream: MediaStream, definedAudioConstraint) => { const getMediaSuccess = (mediaStream: MediaStream, definedAudioConstraint) => {
@ -643,7 +638,7 @@ export class Publisher extends StreamManager {
document.body.removeChild(this.videoReference); document.body.removeChild(this.videoReference);
} }
resolve({ width, height }); return resolve({ width, height });
} }
if (this.videoReference.readyState >= 1) { if (this.videoReference.readyState >= 1) {

View File

@ -170,13 +170,11 @@ export class Session extends EventDispatcher {
participantId: token, participantId: token,
metadata: !!metadata ? this.stringClientMetadata(metadata) : '' metadata: !!metadata ? this.stringClientMetadata(metadata) : ''
}; };
this.connectAux(token).then(() => { this.connectAux(token)
resolve(); .then(() =>resolve())
}).catch(error => { .catch(error => reject(error));
reject(error);
});
} else { } else {
reject(new OpenViduError(OpenViduErrorName.BROWSER_NOT_SUPPORTED, 'Browser ' + platform.getName() + ' (version ' + platform.getVersion() + ') for ' + platform.getFamily() + ' is not supported in OpenVidu')); return reject(new OpenViduError(OpenViduErrorName.BROWSER_NOT_SUPPORTED, 'Browser ' + platform.getName() + ' (version ' + platform.getVersion() + ') for ' + platform.getFamily() + ' is not supported in OpenVidu'));
} }
}); });
} }
@ -294,16 +292,16 @@ export class Session extends EventDispatcher {
return new Promise<Subscriber>((resolve, reject) => { return new Promise<Subscriber>((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} }
let subscriber: Subscriber; let subscriber: Subscriber;
const callback = (error: Error) => { const callback = (error: Error) => {
if (!!error) { if (!!error) {
reject(error); return reject(error);
} else { } else {
resolve(subscriber); return resolve(subscriber);
} }
}; };
@ -332,7 +330,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} else { } else {
const connectionId = subscriber.stream.connection.connectionId; const connectionId = subscriber.stream.connection.connectionId;
@ -344,13 +342,13 @@ export class Session extends EventDispatcher {
(error, response) => { (error, response) => {
if (error) { if (error) {
logger.error('Error unsubscribing from ' + connectionId); logger.error('Error unsubscribing from ' + connectionId);
reject(error); return reject(error);
} else { } else {
logger.info('Unsubscribed correctly from ' + connectionId); logger.info('Unsubscribed correctly from ' + connectionId);
subscriber.stream.streamManager.removeAllVideos(); subscriber.stream.streamManager.removeAllVideos();
subscriber.stream.disposeWebRtcPeer(); subscriber.stream.disposeWebRtcPeer();
subscriber.stream.disposeMediaStream(); subscriber.stream.disposeMediaStream();
resolve(); return resolve();
} }
} }
); );
@ -376,7 +374,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} }
publisher.session = this; publisher.session = this;
@ -388,11 +386,9 @@ export class Session extends EventDispatcher {
publisher.stream.publish() publisher.stream.publish()
.then(() => { .then(() => {
this.sendVideoData(publisher, 8, true, 5); this.sendVideoData(publisher, 8, true, 5);
resolve(); return resolve();
}) })
.catch(error => { .catch(error => reject(error));
reject(error);
});
} else { } else {
// 'Session.unpublish(Publisher)' has been called. Must initialize again Publisher // 'Session.unpublish(Publisher)' has been called. Must initialize again Publisher
publisher.initialize() publisher.initialize()
@ -402,14 +398,10 @@ export class Session extends EventDispatcher {
publisher.stream.publish() publisher.stream.publish()
.then(() => { .then(() => {
this.sendVideoData(publisher, 8, true, 5); this.sendVideoData(publisher, 8, true, 5);
resolve(); return resolve();
}) })
.catch(error => { .catch(error => reject(error));
reject(error); }).catch(error => reject(error));
});
}).catch((error) => {
reject(error);
});
} }
}); });
} }
@ -445,9 +437,9 @@ export class Session extends EventDispatcher {
const stream = publisher.stream; const stream = publisher.stream;
if (!stream.connection) { if (!stream.connection) {
reject(new Error('The associated Connection object of this Publisher is null')); return reject(new Error('The associated Connection object of this Publisher is null'));
} else if (stream.connection !== this.connection) { } else if (stream.connection !== this.connection) {
reject(new Error('The associated Connection object of this Publisher is not your local Connection.' + return reject(new Error('The associated Connection object of this Publisher is not your local Connection.' +
"Only moderators can force unpublish on remote Streams via 'forceUnpublish' method")); "Only moderators can force unpublish on remote Streams via 'forceUnpublish' method"));
} else { } else {
@ -455,7 +447,7 @@ export class Session extends EventDispatcher {
this.openvidu.sendRequest('unpublishVideo', (error, response) => { this.openvidu.sendRequest('unpublishVideo', (error, response) => {
if (error) { if (error) {
reject(error); return reject(error);
} else { } else {
logger.info('Media unpublished correctly'); logger.info('Media unpublished correctly');
@ -470,7 +462,7 @@ export class Session extends EventDispatcher {
publisher.emitEvent('streamDestroyed', [streamEvent]); publisher.emitEvent('streamDestroyed', [streamEvent]);
streamEvent.callDefaultBehavior(); streamEvent.callDefaultBehavior();
resolve(); return resolve();
} }
}); });
} }
@ -499,7 +491,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} }
logger.info('Forcing disconnect for connection ' + connection.connectionId); logger.info('Forcing disconnect for connection ' + connection.connectionId);
@ -510,13 +502,13 @@ export class Session extends EventDispatcher {
if (error) { if (error) {
logger.error('Error forcing disconnect for Connection ' + connection.connectionId, error); logger.error('Error forcing disconnect for Connection ' + connection.connectionId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to force a disconnection")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to force a disconnection"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
logger.info('Forcing disconnect correctly for Connection ' + connection.connectionId); logger.info('Forcing disconnect correctly for Connection ' + connection.connectionId);
resolve(); return resolve();
} }
} }
); );
@ -543,7 +535,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} }
logger.info('Forcing unpublish for stream ' + stream.streamId); logger.info('Forcing unpublish for stream ' + stream.streamId);
@ -554,13 +546,13 @@ export class Session extends EventDispatcher {
if (error) { if (error) {
logger.error('Error forcing unpublish for Stream ' + stream.streamId, error); logger.error('Error forcing unpublish for Stream ' + stream.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to force an unpublishing")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to force an unpublishing"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
logger.info('Forcing unpublish correctly for Stream ' + stream.streamId); logger.info('Forcing unpublish correctly for Stream ' + stream.streamId);
resolve(); return resolve();
} }
} }
); );
@ -584,7 +576,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.sessionConnected()) { if (!this.sessionConnected()) {
reject(this.notConnectedError()); return reject(this.notConnectedError());
} }
const signalMessage = {}; const signalMessage = {};
@ -615,9 +607,9 @@ export class Session extends EventDispatcher {
message: JSON.stringify(signalMessage) message: JSON.stringify(signalMessage)
}, (error, response) => { }, (error, response) => {
if (!!error) { if (!!error) {
reject(error); return reject(error);
} else { } else {
resolve(); return resolve();
} }
}); });
}); });
@ -1129,7 +1121,7 @@ export class Session extends EventDispatcher {
// of the subscriber was already taking place. Always use the last one to retry the re-subscription // of the subscriber was already taking place. Always use the last one to retry the re-subscription
// process, as that SDP offer will be the only one available at the server side. Ignore previous ones // process, as that SDP offer will be the only one available at the server side. Ignore previous ones
stream.reconnectionEventEmitter!['onForciblyReconnectSubscriberLastEvent'] = event; stream.reconnectionEventEmitter!['onForciblyReconnectSubscriberLastEvent'] = event;
reject('Ongoing forced subscriber reconnection'); return reject('Ongoing forced subscriber reconnection');
} else { } else {
// One onForciblyReconnectSubscriber even has been received while a reconnection process // One onForciblyReconnectSubscriber even has been received while a reconnection process
// of the subscriber was already taking place. Set up a listener to wait for it to retry the // of the subscriber was already taking place. Set up a listener to wait for it to retry the
@ -1156,12 +1148,12 @@ export class Session extends EventDispatcher {
} else { } else {
const errMsg = "No stream with streamId '" + event.streamId + "' found for connection '" + event.connectionId + "' on 'streamPropertyChanged' event"; const errMsg = "No stream with streamId '" + event.streamId + "' found for connection '" + event.connectionId + "' on 'streamPropertyChanged' event";
logger.error(errMsg); logger.error(errMsg);
reject(errMsg); return reject(errMsg);
} }
}) })
.catch(openViduError => { .catch(openViduError => {
logger.error(openViduError); logger.error(openViduError);
reject(openViduError); return reject(openViduError);
}); });
}); });
} }
@ -1354,14 +1346,14 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.openvidu.startWs((error) => { this.openvidu.startWs((error) => {
if (!!error) { if (!!error) {
reject(error); return reject(error);
} else { } else {
const joinParams = this.initializeParams(token); const joinParams = this.initializeParams(token);
this.openvidu.sendRequest('joinRoom', joinParams, (error, response: LocalConnectionOptions) => { this.openvidu.sendRequest('joinRoom', joinParams, (error, response: LocalConnectionOptions) => {
if (!!error) { if (!!error) {
reject(error); return reject(error);
} else { } else {
// Process join room response // Process join room response
@ -1402,7 +1394,7 @@ export class Session extends EventDispatcher {
this.ee.emitEvent('streamCreated', [new StreamEvent(false, this, 'streamCreated', stream, '')]); this.ee.emitEvent('streamCreated', [new StreamEvent(false, this, 'streamCreated', stream, '')]);
}); });
resolve(); return resolve();
} }
}); });
} }
@ -1439,14 +1431,14 @@ export class Session extends EventDispatcher {
const connection = this.remoteConnections.get(connectionId); const connection = this.remoteConnections.get(connectionId);
if (!!connection) { if (!!connection) {
// Resolve remote connection // Resolve remote connection
resolve(connection); return resolve(connection);
} else { } else {
if (this.connection.connectionId === connectionId) { if (this.connection.connectionId === connectionId) {
// Resolve local connection // Resolve local connection
resolve(this.connection); return resolve(this.connection);
} else { } else {
// Connection not found. Reject with OpenViduError // Connection not found. Reject with OpenViduError
reject(new OpenViduError(OpenViduErrorName.GENERIC_ERROR, errorMessage)); return reject(new OpenViduError(OpenViduErrorName.GENERIC_ERROR, errorMessage));
} }
} }
}); });
@ -1457,12 +1449,12 @@ export class Session extends EventDispatcher {
const connection = this.remoteConnections.get(connectionId); const connection = this.remoteConnections.get(connectionId);
if (!!connection) { if (!!connection) {
// Resolve remote connection // Resolve remote connection
resolve(connection); return resolve(connection);
} else { } else {
// Remote connection not found. Reject with OpenViduError // Remote connection not found. Reject with OpenViduError
const errorMessage = 'Remote connection ' + connectionId + " unknown when '" + operation + "'. " + const errorMessage = 'Remote connection ' + connectionId + " unknown when '" + operation + "'. " +
'Existing remote connections: ' + JSON.stringify(this.remoteConnections.keys()); 'Existing remote connections: ' + JSON.stringify(this.remoteConnections.keys());
reject(new OpenViduError(OpenViduErrorName.GENERIC_ERROR, errorMessage)); return reject(new OpenViduError(OpenViduErrorName.GENERIC_ERROR, errorMessage));
} }
}); });
} }

View File

@ -306,7 +306,7 @@ export class Stream {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.session.sessionConnected()) { if (!this.session.sessionConnected()) {
reject(this.session.notConnectedError()); return reject(this.session.notConnectedError());
} }
logger.info('Applying filter to stream ' + this.streamId); logger.info('Applying filter to stream ' + this.streamId);
@ -322,9 +322,9 @@ export class Stream {
if (error) { if (error) {
logger.error('Error applying filter for Stream ' + this.streamId, error); logger.error('Error applying filter for Stream ' + this.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to apply a filter")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to apply a filter"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
logger.info('Filter successfully applied on Stream ' + this.streamId); logger.info('Filter successfully applied on Stream ' + this.streamId);
@ -333,7 +333,7 @@ export class Stream {
this.filter.stream = this; this.filter.stream = this;
this.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.session, this, 'filter', this.filter, oldValue, 'applyFilter')]); this.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.session, this, 'filter', this.filter, oldValue, 'applyFilter')]);
this.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.streamManager, this, 'filter', this.filter, oldValue, 'applyFilter')]); this.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.streamManager, this, 'filter', this.filter, oldValue, 'applyFilter')]);
resolve(this.filter); return resolve(this.filter);
} }
} }
); );
@ -349,7 +349,7 @@ export class Stream {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!this.session.sessionConnected()) { if (!this.session.sessionConnected()) {
reject(this.session.notConnectedError()); return reject(this.session.notConnectedError());
} }
logger.info('Removing filter of stream ' + this.streamId); logger.info('Removing filter of stream ' + this.streamId);
@ -360,9 +360,9 @@ export class Stream {
if (error) { if (error) {
logger.error('Error removing filter for Stream ' + this.streamId, error); logger.error('Error removing filter for Stream ' + this.streamId, error);
if (error.code === 401) { if (error.code === 401) {
reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to remove a filter")); return reject(new OpenViduError(OpenViduErrorName.OPENVIDU_PERMISSION_DENIED, "You don't have permissions to remove a filter"));
} else { } else {
reject(error); return reject(error);
} }
} else { } else {
logger.info('Filter successfully removed from Stream ' + this.streamId); logger.info('Filter successfully removed from Stream ' + this.streamId);
@ -370,7 +370,7 @@ export class Stream {
delete this.filter; delete this.filter;
this.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.session, this, 'filter', this.filter!, oldValue, 'applyFilter')]); this.session.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.session, this, 'filter', this.filter!, oldValue, 'applyFilter')]);
this.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.streamManager, this, 'filter', this.filter!, oldValue, 'applyFilter')]); this.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this.streamManager, this, 'filter', this.filter!, oldValue, 'applyFilter')]);
resolve(); return resolve();
} }
} }
); );
@ -438,12 +438,8 @@ export class Stream {
subscribe(): Promise<void> { subscribe(): Promise<void> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.initWebRtcPeerReceive(false) this.initWebRtcPeerReceive(false)
.then(() => { .then(() => resolve())
resolve(); .catch(error => reject(error));
})
.catch(error => {
reject(error);
});
}); });
} }
@ -454,21 +450,13 @@ export class Stream {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.isLocalStreamReadyToPublish) { if (this.isLocalStreamReadyToPublish) {
this.initWebRtcPeerSend(false) this.initWebRtcPeerSend(false)
.then(() => { .then(() => resolve())
resolve(); .catch(error => reject(error));
})
.catch(error => {
reject(error);
});
} else { } else {
this.ee.once('stream-ready-to-publish', () => { this.ee.once('stream-ready-to-publish', () => {
this.publish() this.publish()
.then(() => { .then(() => resolve())
resolve(); .catch(error => reject(error));
})
.catch(error => {
reject(error);
});
}); });
} }
}); });
@ -826,12 +814,8 @@ export class Stream {
} else { } else {
// Ongoing reconnection // Ongoing reconnection
console.warn(`Trying to reconnect stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) but an ongoing reconnection process is active. Waiting for response...`); console.warn(`Trying to reconnect stream ${this.streamId} (${this.isLocal() ? 'Publisher' : 'Subscriber'}) but an ongoing reconnection process is active. Waiting for response...`);
this.reconnectionEventEmitter.once('success', () => { this.reconnectionEventEmitter.once('success', () => resolve());
resolve(); this.reconnectionEventEmitter.once('error', error => reject(error));
});
this.reconnectionEventEmitter.once('error', error => {
reject(error);
});
return true; return true;
} }
} }
@ -857,7 +841,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('success'); this.reconnectionEventEmitter?.emitEvent('success');
delete this.reconnectionEventEmitter; delete this.reconnectionEventEmitter;
} }
resolve(); return resolve();
} }
const finalReject = error => { const finalReject = error => {
@ -865,7 +849,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('error', [error]); this.reconnectionEventEmitter?.emitEvent('error', [error]);
delete this.reconnectionEventEmitter; delete this.reconnectionEventEmitter;
} }
reject(error); return reject(error);
} }
const successOfferCallback = (sdpOfferParam) => { const successOfferCallback = (sdpOfferParam) => {
@ -985,7 +969,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('success'); this.reconnectionEventEmitter?.emitEvent('success');
delete this.reconnectionEventEmitter; delete this.reconnectionEventEmitter;
} }
resolve(); return resolve();
} }
/** /**
@ -997,7 +981,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('error', [error]); this.reconnectionEventEmitter?.emitEvent('error', [error]);
delete this.reconnectionEventEmitter; delete this.reconnectionEventEmitter;
} }
reject(error); return reject(error);
} }
/** /**
@ -1038,10 +1022,13 @@ export class Stream {
*/ */
initWebRtcPeerReceiveFromClient(reconnect: boolean): Promise<void> { initWebRtcPeerReceiveFromClient(reconnect: boolean): Promise<void> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.completeWebRtcPeerReceive(reconnect, false).then(response => { this.completeWebRtcPeerReceive(reconnect, false)
this.webRtcPeer.processRemoteAnswer(response.sdpAnswer) .then(response => {
.then(() => resolve()).catch(error => reject(error)); this.webRtcPeer.processRemoteAnswer(response.sdpAnswer)
}).catch(error => reject(error)); .then(() => resolve())
.catch(error => reject(error));
})
.catch(error => reject(error));
}); });
} }
@ -1053,10 +1040,11 @@ export class Stream {
// Server initiates negotiation // Server initiates negotiation
this.session.openvidu.sendRequest('prepareReceiveVideoFrom', { sender: this.streamId, reconnect }, (error, response) => { this.session.openvidu.sendRequest('prepareReceiveVideoFrom', { sender: this.streamId, reconnect }, (error, response) => {
if (error) { if (error) {
reject(new Error('Error on prepareReceiveVideoFrom: ' + JSON.stringify(error))); return reject(new Error('Error on prepareReceiveVideoFrom: ' + JSON.stringify(error)));
} else { } else {
this.completeWebRtcPeerReceive(reconnect, false, response.sdpOffer) this.completeWebRtcPeerReceive(reconnect, false, response.sdpOffer)
.then(() => resolve()).catch(error => reject(error)); .then(() => resolve())
.catch(error => reject(error));
} }
}); });
}); });
@ -1088,9 +1076,9 @@ export class Stream {
this.session.openvidu.sendRequest(method, params, (error, response) => { this.session.openvidu.sendRequest(method, params, (error, response) => {
if (error) { if (error) {
reject(new Error('Error on ' + method + ' : ' + JSON.stringify(error))); return reject(new Error('Error on ' + method + ' : ' + JSON.stringify(error)));
} else { } else {
resolve(response); return resolve(response);
} }
}); });
}; };
@ -1121,13 +1109,13 @@ export class Stream {
this.webRtcPeer.processLocalAnswer(sdpAnswer).then(() => { this.webRtcPeer.processLocalAnswer(sdpAnswer).then(() => {
sendSdpToServer(sdpAnswer.sdp!); sendSdpToServer(sdpAnswer.sdp!);
}).catch(error => { }).catch(error => {
reject(new Error('(subscribe) SDP process local answer error: ' + JSON.stringify(error))); return reject(new Error('(subscribe) SDP process local answer error: ' + JSON.stringify(error)));
}); });
}).catch(error => { }).catch(error => {
reject(new Error('(subscribe) SDP create answer error: ' + JSON.stringify(error))); return reject(new Error('(subscribe) SDP create answer error: ' + JSON.stringify(error)));
}); });
}).catch(error => { }).catch(error => {
reject(new Error('(subscribe) SDP process remote offer error: ' + JSON.stringify(error))); return reject(new Error('(subscribe) SDP process remote offer error: ' + JSON.stringify(error)));
}); });
} else { } else {
@ -1136,10 +1124,10 @@ export class Stream {
this.webRtcPeer.processLocalOffer(sdpOffer).then(() => { this.webRtcPeer.processLocalOffer(sdpOffer).then(() => {
sendSdpToServer(sdpOffer.sdp!); sendSdpToServer(sdpOffer.sdp!);
}).catch(error => { }).catch(error => {
reject(new Error('(subscribe) SDP process local offer error: ' + JSON.stringify(error))); return reject(new Error('(subscribe) SDP process local offer error: ' + JSON.stringify(error)));
}); });
}).catch(error => { }).catch(error => {
reject(new Error('(subscribe) SDP create offer error: ' + JSON.stringify(error))); return reject(new Error('(subscribe) SDP create offer error: ' + JSON.stringify(error)));
}); });
} }
@ -1306,20 +1294,20 @@ export class Stream {
if (wsReadyState === 1) { if (wsReadyState === 1) {
const responseTimeout = setTimeout(() => { const responseTimeout = setTimeout(() => {
console.warn(`[${event}] Websocket timeout of ${msResponseTimeout}ms`); console.warn(`[${event}] Websocket timeout of ${msResponseTimeout}ms`);
resolve(false); return resolve(false);
}, msResponseTimeout); }, msResponseTimeout);
this.session.openvidu.sendRequest('echo', {}, (error, response) => { this.session.openvidu.sendRequest('echo', {}, (error, response) => {
clearTimeout(responseTimeout); clearTimeout(responseTimeout);
if (!!error) { if (!!error) {
console.warn(`[${event}] Websocket 'echo' returned error: ${error}`); console.warn(`[${event}] Websocket 'echo' returned error: ${error}`);
resolve(false); return resolve(false);
} else { } else {
resolve(true); return resolve(true);
} }
}); });
} else { } else {
console.warn(`[${event}] Websocket readyState is ${wsReadyState}`); console.warn(`[${event}] Websocket readyState is ${wsReadyState}`);
resolve(false); return resolve(false);
} }
}); });
} }

View File

@ -196,8 +196,7 @@ export class WebRtcPeer {
// MediaStream. // MediaStream.
if (!this.configuration.mediaStream) { if (!this.configuration.mediaStream) {
reject(new Error(`${this.configuration.mode} direction requested, but no stream was configured to be sent`)); return reject(new Error(`${this.configuration.mode} direction requested, but no stream was configured to be sent`));
return;
} }
for (const track of this.configuration.mediaStream.getTracks()) { for (const track of this.configuration.mediaStream.getTracks()) {
@ -320,7 +319,7 @@ export class WebRtcPeer {
// Enforce our desired direction. // Enforce our desired direction.
tc.direction = this.configuration.mode; tc.direction = this.configuration.mode;
} else { } else {
reject(new Error(`${kind} requested, but no transceiver was created from remote description`)); return reject(new Error(`${kind} requested, but no transceiver was created from remote description`));
} }
} }
@ -344,11 +343,9 @@ export class WebRtcPeer {
offerToReceiveAudio: offerAudio, offerToReceiveAudio: offerAudio,
offerToReceiveVideo: offerVideo offerToReceiveVideo: offerVideo
}; };
this.pc!.createAnswer(constraints).then(sdpAnswer => { this.pc!.createAnswer(constraints)
resolve(sdpAnswer); .then(sdpAnswer => resolve(sdpAnswer))
}).catch(error => { .catch(error => reject(error));
reject(error);
});
} }
} }
@ -368,14 +365,12 @@ export class WebRtcPeer {
const localDescription = this.pc.localDescription; const localDescription = this.pc.localDescription;
if (!!localDescription) { if (!!localDescription) {
logger.debug('Local description set', localDescription.sdp); logger.debug('Local description set', localDescription.sdp);
resolve(); return resolve();
} else { } else {
reject('Local description is not defined'); return reject('Local description is not defined');
} }
}) })
.catch(error => { .catch(error => reject(error));
reject(error);
});
}); });
} }
@ -391,15 +386,11 @@ export class WebRtcPeer {
logger.debug('SDP offer received, setting remote description', offer); logger.debug('SDP offer received, setting remote description', offer);
if (this.pc.signalingState === 'closed') { if (this.pc.signalingState === 'closed') {
reject('RTCPeerConnection is closed when trying to set remote description'); return reject('RTCPeerConnection is closed when trying to set remote description');
} }
this.setRemoteDescription(offer) this.setRemoteDescription(offer)
.then(() => { .then(() => resolve())
resolve(); .catch(error => reject(error));
})
.catch(error => {
reject(error);
});
}); });
} }
@ -410,7 +401,7 @@ export class WebRtcPeer {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logger.debug('SDP answer created, setting local description'); logger.debug('SDP answer created, setting local description');
if (this.pc.signalingState === 'closed') { if (this.pc.signalingState === 'closed') {
reject('RTCPeerConnection is closed when trying to set local description'); return reject('RTCPeerConnection is closed when trying to set local description');
} }
this.pc.setLocalDescription(answer) this.pc.setLocalDescription(answer)
.then(() => resolve()) .then(() => resolve())
@ -430,7 +421,7 @@ export class WebRtcPeer {
logger.debug('SDP answer received, setting remote description'); logger.debug('SDP answer received, setting remote description');
if (this.pc.signalingState === 'closed') { if (this.pc.signalingState === 'closed') {
reject('RTCPeerConnection is closed when trying to set remote description'); return reject('RTCPeerConnection is closed when trying to set remote description');
} }
this.setRemoteDescription(answer) this.setRemoteDescription(answer)
.then(() => resolve()) .then(() => resolve())

View File

@ -278,7 +278,7 @@ export class WebRtcStats {
finalRemoteCandidate = 'ERROR: No active remote ICE candidate. Probably ICE-TCP is being used'; finalRemoteCandidate = 'ERROR: No active remote ICE candidate. Probably ICE-TCP is being used';
} }
resolve({ return resolve({
localCandidate: finalLocalCandidate, localCandidate: finalLocalCandidate,
remoteCandidate: finalRemoteCandidate remoteCandidate: finalRemoteCandidate
}); });