in modules/core/src/loaders/xviz-websocket-loader.js [86:137]
connect() {
assert(this.socket === null, 'Socket Manager still connected');
this._debug('stream_start');
const {url} = this.requestParams;
// Wrap retry logic around connection
return PromiseRetry(retry => {
return new Promise((resolve, reject) => {
try {
const ws = new this.WebSocketClass(url);
ws.binaryType = 'arraybuffer';
ws.onmessage = message => {
const hasMetadata = Boolean(this.getMetadata());
return parseStreamMessage({
message: message.data,
onResult: this.onXVIZMessage,
onError: this.onError,
debug: this._debug.bind(this, 'parse_message'),
worker: hasMetadata && this.options.worker,
maxConcurrency: this.options.maxConcurrency
});
};
ws.onerror = this.onError;
ws.onclose = event => {
this._onWSClose(event);
reject(event);
};
// On success, resolve the promise with the now ready socket
ws.onopen = () => {
this.socket = ws;
this._onWSOpen();
resolve(ws);
};
} catch (err) {
reject(err);
}
}).catch(event => {
this._onWSError(event);
const isAbnormalClosure = event.code > 1000 && event.code !== 1005;
// Retry if abnormal or connection never established
if (isAbnormalClosure || !this.socket) {
retry();
}
});
}, this.retrySettings).catch(this._onWSError);
}