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) {
const errorMsg = "'params' property must be a JSON formatted object";
logger.error(errorMsg);
reject(errorMsg);
return reject(errorMsg);
}
} else {
stringParams = <string>params;
@ -111,9 +111,9 @@ export class Filter {
if (error) {
logger.error('Error executing filter method for Stream ' + this.stream.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
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.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')]);
resolve();
return resolve();
}
}
);
@ -147,14 +147,14 @@ export class Filter {
if (error) {
logger.error('Error adding filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
this.handlers.set(eventType, handler);
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) {
logger.error('Error removing filter event listener to event ' + eventType + 'for Stream ' + this.stream.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
this.handlers.delete(eventType);
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 (!!mimeType) {
if (!MediaRecorder.isTypeSupported(mimeType)) {
reject(new Error('mimeType "' + mimeType + '" is not supported'));
return reject(new Error('mimeType "' + mimeType + '" is not supported'));
}
options = { mimeType };
} else {
@ -104,7 +104,7 @@ export class LocalRecorder {
this.mediaRecorder.start(10);
} catch (err) {
reject(err);
return reject(err);
}
this.mediaRecorder.ondataavailable = (e) => {
@ -136,7 +136,7 @@ export class LocalRecorder {
};
this.state = LocalRecorderState.RECORDING;
resolve();
return resolve();
});
}
@ -154,11 +154,11 @@ export class LocalRecorder {
}
this.mediaRecorder.onstop = () => {
this.onStopDefault();
resolve();
return resolve();
};
this.mediaRecorder.stop();
} catch (e) {
reject(e);
return reject(e);
}
});
}
@ -172,13 +172,13 @@ export class LocalRecorder {
return new Promise((resolve, reject) => {
try {
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.state = LocalRecorderState.PAUSED;
resolve();
return resolve();
} catch (error) {
reject(error);
return reject(error);
}
});
}
@ -195,9 +195,9 @@ export class LocalRecorder {
}
this.mediaRecorder.resume();
this.state = LocalRecorderState.RECORDING;
resolve();
return resolve();
} catch (error) {
reject(error);
return reject(error);
}
});
}
@ -300,7 +300,7 @@ export class LocalRecorder {
uploadAsBinary(endpoint: string, headers?: any): Promise<any> {
return new Promise((resolve, reject) => {
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 {
const http = new XMLHttpRequest();
http.open('POST', endpoint, true);
@ -315,9 +315,9 @@ export class LocalRecorder {
if (http.readyState === 4) {
if (http.status.toString().charAt(0) === '2') {
// Success response from server (HTTP status standard: 2XX is success)
resolve(http.responseText);
return resolve(http.responseText);
} else {
reject(http.status);
return reject(http.status);
}
}
};
@ -340,7 +340,7 @@ export class LocalRecorder {
uploadAsMultipartfile(endpoint: string, headers?: any): Promise<any> {
return new Promise((resolve, reject) => {
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 {
const http = new XMLHttpRequest();
http.open('POST', endpoint, true);
@ -358,9 +358,9 @@ export class LocalRecorder {
if (http.readyState === 4) {
if (http.status.toString().charAt(0) === '2') {
// Success response from server (HTTP status standard: 2XX is success)
resolve(http.responseText);
return resolve(http.responseText);
} else {
reject(http.status);
return reject(http.status);
}
}
};

View File

@ -272,9 +272,9 @@ export class OpenVidu {
const callback = (error: Error) => {
if (!!error) {
reject(error);
return reject(error);
} else {
resolve(publisher);
return resolve(publisher);
}
};
@ -416,7 +416,7 @@ export class OpenVidu {
});
}
});
resolve(devices);
return resolve(devices);
});
} else {
@ -430,11 +430,11 @@ export class OpenVidu {
});
}
});
resolve(devices);
return resolve(devices);
}
}).catch((error) => {
logger.error('Error getting devices', error);
reject(error);
return reject(error);
});
});
}
@ -497,7 +497,7 @@ export class OpenVidu {
navigator.mediaDevices.getUserMedia(constraintsAux)
.then(audioOnlyStream => {
previousMediaStream.addTrack(audioOnlyStream.getAudioTracks()[0]);
resolve(previousMediaStream);
return resolve(previousMediaStream);
})
.catch(error => {
previousMediaStream.getAudioTracks().forEach((track) => {
@ -506,7 +506,7 @@ export class OpenVidu {
previousMediaStream.getVideoTracks().forEach((track) => {
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) {
// 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 {
// getUserMedia must be called. AUDIO or VIDEO are requesting a new track
@ -547,13 +547,13 @@ export class OpenVidu {
askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
return;
} else {
resolve(mediaStream);
return resolve(mediaStream);
}
})
.catch(error => {
let errorName: OpenViduErrorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED;
const errorMessage = error.toString();
reject(new OpenViduError(errorName, errorMessage));
return reject(new OpenViduError(errorName, errorMessage));
});
return;
} else {
@ -572,7 +572,7 @@ export class OpenVidu {
askForAudioStreamOnly(mediaStream, <MediaStreamConstraints>myConstraints.constraints);
return;
} else {
resolve(mediaStream);
return resolve(mediaStream);
}
})
.catch(error => {
@ -583,12 +583,10 @@ export class OpenVidu {
} else {
errorName = OpenViduErrorName.SCREEN_CAPTURE_DENIED;
}
reject(new OpenViduError(errorName, errorMessage));
return reject(new OpenViduError(errorName, errorMessage));
});
}
}).catch((error: OpenViduError) => {
reject(error);
});
}).catch((error: OpenViduError) => reject(error));
});
}
@ -697,7 +695,7 @@ export class OpenVidu {
}
if (myConstraints.constraints!.audio === false && myConstraints.constraints!.video === false) {
// 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"));
}
@ -749,7 +747,7 @@ export class OpenVidu {
// CASE 4: deviceId or screen sharing
this.configureDeviceIdOrScreensharing(myConstraints, publisherProperties, resolve, reject);
resolve(myConstraints);
return resolve(myConstraints);
});
}
@ -919,7 +917,7 @@ export class OpenVidu {
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());
logger.error(error);
reject(error);
return reject(error);
} else {
if (platform.isElectron()) {
@ -932,7 +930,7 @@ export class OpenVidu {
chromeMediaSourceId: electronScreenId
}
};
resolve(myConstraints);
return resolve(myConstraints);
} else {
@ -945,26 +943,26 @@ export class OpenVidu {
if (error === 'permission-denied' || error === 'PermissionDeniedError') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop');
logger.error(error);
reject(error);
return reject(error);
} else {
const extensionId = this.advancedConfiguration.screenShareChromeExtension!.split('/').pop()!!.trim();
screenSharing.getChromeExtensionStatus(extensionId, status => {
if (status === 'installed-disabled') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension');
logger.error(error);
reject(error);
return reject(error);
}
if (status === 'not-installed') {
const error = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, (<string>this.advancedConfiguration.screenShareChromeExtension));
logger.error(error);
reject(error);
return reject(error);
}
});
return;
}
} else {
myConstraints.constraints!.video = screenConstraints;
resolve(myConstraints);
return resolve(myConstraints);
}
});
return;
@ -972,7 +970,7 @@ export class OpenVidu {
if (navigator.mediaDevices['getDisplayMedia']) {
// getDisplayMedia support (Chrome >= 72, Firefox >= 66, Safari >= 13)
resolve(myConstraints);
return resolve(myConstraints);
} else {
// Default screen sharing extension for Chrome/Opera, or is Firefox < 66
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';
const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED, extensionUrl);
logger.error(err);
reject(err);
return reject(err);
} else if (error === 'installed-disabled') {
const err = new OpenViduError(OpenViduErrorName.SCREEN_EXTENSION_DISABLED, 'You must enable the screen extension');
logger.error(err);
reject(err);
return reject(err);
} else if (error === 'permission-denied') {
const err = new OpenViduError(OpenViduErrorName.SCREEN_CAPTURE_DENIED, 'You must allow access to one window of your desktop');
logger.error(err);
reject(err);
return reject(err);
} else {
const err = new OpenViduError(OpenViduErrorName.GENERIC_ERROR, 'Unknown error when accessing screen share');
logger.error(err);
logger.error(error);
reject(err);
return reject(err);
}
} else {
myConstraints.constraints!.video = screenConstraints.video;
resolve(myConstraints);
return resolve(myConstraints);
}
});
return;

View File

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

View File

@ -170,13 +170,11 @@ export class Session extends EventDispatcher {
participantId: token,
metadata: !!metadata ? this.stringClientMetadata(metadata) : ''
};
this.connectAux(token).then(() => {
resolve();
}).catch(error => {
reject(error);
});
this.connectAux(token)
.then(() =>resolve())
.catch(error => reject(error));
} 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) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
}
let subscriber: Subscriber;
const callback = (error: Error) => {
if (!!error) {
reject(error);
return reject(error);
} else {
resolve(subscriber);
return resolve(subscriber);
}
};
@ -332,7 +330,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
} else {
const connectionId = subscriber.stream.connection.connectionId;
@ -344,13 +342,13 @@ export class Session extends EventDispatcher {
(error, response) => {
if (error) {
logger.error('Error unsubscribing from ' + connectionId);
reject(error);
return reject(error);
} else {
logger.info('Unsubscribed correctly from ' + connectionId);
subscriber.stream.streamManager.removeAllVideos();
subscriber.stream.disposeWebRtcPeer();
subscriber.stream.disposeMediaStream();
resolve();
return resolve();
}
}
);
@ -376,7 +374,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
}
publisher.session = this;
@ -388,11 +386,9 @@ export class Session extends EventDispatcher {
publisher.stream.publish()
.then(() => {
this.sendVideoData(publisher, 8, true, 5);
resolve();
return resolve();
})
.catch(error => {
reject(error);
});
.catch(error => reject(error));
} else {
// 'Session.unpublish(Publisher)' has been called. Must initialize again Publisher
publisher.initialize()
@ -402,14 +398,10 @@ export class Session extends EventDispatcher {
publisher.stream.publish()
.then(() => {
this.sendVideoData(publisher, 8, true, 5);
resolve();
return resolve();
})
.catch(error => {
reject(error);
});
}).catch((error) => {
reject(error);
});
.catch(error => reject(error));
}).catch(error => reject(error));
}
});
}
@ -445,9 +437,9 @@ export class Session extends EventDispatcher {
const stream = publisher.stream;
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) {
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"));
} else {
@ -455,7 +447,7 @@ export class Session extends EventDispatcher {
this.openvidu.sendRequest('unpublishVideo', (error, response) => {
if (error) {
reject(error);
return reject(error);
} else {
logger.info('Media unpublished correctly');
@ -470,7 +462,7 @@ export class Session extends EventDispatcher {
publisher.emitEvent('streamDestroyed', [streamEvent]);
streamEvent.callDefaultBehavior();
resolve();
return resolve();
}
});
}
@ -499,7 +491,7 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
}
logger.info('Forcing disconnect for connection ' + connection.connectionId);
@ -510,13 +502,13 @@ export class Session extends EventDispatcher {
if (error) {
logger.error('Error forcing disconnect for Connection ' + connection.connectionId, error);
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 {
reject(error);
return reject(error);
}
} else {
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) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
}
logger.info('Forcing unpublish for stream ' + stream.streamId);
@ -554,13 +546,13 @@ export class Session extends EventDispatcher {
if (error) {
logger.error('Error forcing unpublish for Stream ' + stream.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
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) => {
if (!this.sessionConnected()) {
reject(this.notConnectedError());
return reject(this.notConnectedError());
}
const signalMessage = {};
@ -615,9 +607,9 @@ export class Session extends EventDispatcher {
message: JSON.stringify(signalMessage)
}, (error, response) => {
if (!!error) {
reject(error);
return reject(error);
} 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
// process, as that SDP offer will be the only one available at the server side. Ignore previous ones
stream.reconnectionEventEmitter!['onForciblyReconnectSubscriberLastEvent'] = event;
reject('Ongoing forced subscriber reconnection');
return reject('Ongoing forced subscriber reconnection');
} else {
// 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
@ -1156,12 +1148,12 @@ export class Session extends EventDispatcher {
} else {
const errMsg = "No stream with streamId '" + event.streamId + "' found for connection '" + event.connectionId + "' on 'streamPropertyChanged' event";
logger.error(errMsg);
reject(errMsg);
return reject(errMsg);
}
})
.catch(openViduError => {
logger.error(openViduError);
reject(openViduError);
return reject(openViduError);
});
});
}
@ -1354,14 +1346,14 @@ export class Session extends EventDispatcher {
return new Promise((resolve, reject) => {
this.openvidu.startWs((error) => {
if (!!error) {
reject(error);
return reject(error);
} else {
const joinParams = this.initializeParams(token);
this.openvidu.sendRequest('joinRoom', joinParams, (error, response: LocalConnectionOptions) => {
if (!!error) {
reject(error);
return reject(error);
} else {
// Process join room response
@ -1402,7 +1394,7 @@ export class Session extends EventDispatcher {
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);
if (!!connection) {
// Resolve remote connection
resolve(connection);
return resolve(connection);
} else {
if (this.connection.connectionId === connectionId) {
// Resolve local connection
resolve(this.connection);
return resolve(this.connection);
} else {
// 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);
if (!!connection) {
// Resolve remote connection
resolve(connection);
return resolve(connection);
} else {
// Remote connection not found. Reject with OpenViduError
const errorMessage = 'Remote connection ' + connectionId + " unknown when '" + operation + "'. " +
'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) => {
if (!this.session.sessionConnected()) {
reject(this.session.notConnectedError());
return reject(this.session.notConnectedError());
}
logger.info('Applying filter to stream ' + this.streamId);
@ -322,9 +322,9 @@ export class Stream {
if (error) {
logger.error('Error applying filter for Stream ' + this.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
logger.info('Filter successfully applied on Stream ' + this.streamId);
@ -333,7 +333,7 @@ export class Stream {
this.filter.stream = this;
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')]);
resolve(this.filter);
return resolve(this.filter);
}
}
);
@ -349,7 +349,7 @@ export class Stream {
return new Promise((resolve, reject) => {
if (!this.session.sessionConnected()) {
reject(this.session.notConnectedError());
return reject(this.session.notConnectedError());
}
logger.info('Removing filter of stream ' + this.streamId);
@ -360,9 +360,9 @@ export class Stream {
if (error) {
logger.error('Error removing filter for Stream ' + this.streamId, error);
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 {
reject(error);
return reject(error);
}
} else {
logger.info('Filter successfully removed from Stream ' + this.streamId);
@ -370,7 +370,7 @@ export class Stream {
delete this.filter;
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')]);
resolve();
return resolve();
}
}
);
@ -438,12 +438,8 @@ export class Stream {
subscribe(): Promise<void> {
return new Promise((resolve, reject) => {
this.initWebRtcPeerReceive(false)
.then(() => {
resolve();
})
.catch(error => {
reject(error);
});
.then(() => resolve())
.catch(error => reject(error));
});
}
@ -454,21 +450,13 @@ export class Stream {
return new Promise((resolve, reject) => {
if (this.isLocalStreamReadyToPublish) {
this.initWebRtcPeerSend(false)
.then(() => {
resolve();
})
.catch(error => {
reject(error);
});
.then(() => resolve())
.catch(error => reject(error));
} else {
this.ee.once('stream-ready-to-publish', () => {
this.publish()
.then(() => {
resolve();
})
.catch(error => {
reject(error);
});
.then(() => resolve())
.catch(error => reject(error));
});
}
});
@ -826,12 +814,8 @@ export class Stream {
} else {
// Ongoing reconnection
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', () => {
resolve();
});
this.reconnectionEventEmitter.once('error', error => {
reject(error);
});
this.reconnectionEventEmitter.once('success', () => resolve());
this.reconnectionEventEmitter.once('error', error => reject(error));
return true;
}
}
@ -857,7 +841,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('success');
delete this.reconnectionEventEmitter;
}
resolve();
return resolve();
}
const finalReject = error => {
@ -865,7 +849,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('error', [error]);
delete this.reconnectionEventEmitter;
}
reject(error);
return reject(error);
}
const successOfferCallback = (sdpOfferParam) => {
@ -985,7 +969,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('success');
delete this.reconnectionEventEmitter;
}
resolve();
return resolve();
}
/**
@ -997,7 +981,7 @@ export class Stream {
this.reconnectionEventEmitter?.emitEvent('error', [error]);
delete this.reconnectionEventEmitter;
}
reject(error);
return reject(error);
}
/**
@ -1038,10 +1022,13 @@ export class Stream {
*/
initWebRtcPeerReceiveFromClient(reconnect: boolean): Promise<void> {
return new Promise((resolve, reject) => {
this.completeWebRtcPeerReceive(reconnect, false).then(response => {
this.webRtcPeer.processRemoteAnswer(response.sdpAnswer)
.then(() => resolve()).catch(error => reject(error));
}).catch(error => reject(error));
this.completeWebRtcPeerReceive(reconnect, false)
.then(response => {
this.webRtcPeer.processRemoteAnswer(response.sdpAnswer)
.then(() => resolve())
.catch(error => reject(error));
})
.catch(error => reject(error));
});
}
@ -1053,10 +1040,11 @@ export class Stream {
// Server initiates negotiation
this.session.openvidu.sendRequest('prepareReceiveVideoFrom', { sender: this.streamId, reconnect }, (error, response) => {
if (error) {
reject(new Error('Error on prepareReceiveVideoFrom: ' + JSON.stringify(error)));
return reject(new Error('Error on prepareReceiveVideoFrom: ' + JSON.stringify(error)));
} else {
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) => {
if (error) {
reject(new Error('Error on ' + method + ' : ' + JSON.stringify(error)));
return reject(new Error('Error on ' + method + ' : ' + JSON.stringify(error)));
} else {
resolve(response);
return resolve(response);
}
});
};
@ -1121,13 +1109,13 @@ export class Stream {
this.webRtcPeer.processLocalAnswer(sdpAnswer).then(() => {
sendSdpToServer(sdpAnswer.sdp!);
}).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 => {
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 => {
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 {
@ -1136,10 +1124,10 @@ export class Stream {
this.webRtcPeer.processLocalOffer(sdpOffer).then(() => {
sendSdpToServer(sdpOffer.sdp!);
}).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 => {
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) {
const responseTimeout = setTimeout(() => {
console.warn(`[${event}] Websocket timeout of ${msResponseTimeout}ms`);
resolve(false);
return resolve(false);
}, msResponseTimeout);
this.session.openvidu.sendRequest('echo', {}, (error, response) => {
clearTimeout(responseTimeout);
if (!!error) {
console.warn(`[${event}] Websocket 'echo' returned error: ${error}`);
resolve(false);
return resolve(false);
} else {
resolve(true);
return resolve(true);
}
});
} else {
console.warn(`[${event}] Websocket readyState is ${wsReadyState}`);
resolve(false);
return resolve(false);
}
});
}

View File

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

View File

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