diff --git a/lib/app/backend/BackendProcess.js b/lib/app/backend/BackendProcess.js index 6077ce3f..f84c41ca 100644 --- a/lib/app/backend/BackendProcess.js +++ b/lib/app/backend/BackendProcess.js @@ -2,6 +2,7 @@ const EventEmitter = require('events') const io = require('socket.io-client') const async = require('neo-async') const t = require('../../i18n')(__filename) +const config = require('../../config') // @ts-check class BackendProcess extends EventEmitter { @@ -125,18 +126,23 @@ class BackendProcess extends EventEmitter { * @return {Promise} */ _emitToSocket (event, data = null) { - return new Promise((resolve, reject) => { - if (data) { - return this.socket.emit(event, data, (err, result) => { + return Promise.race([ + new Promise((resolve, reject) => { + setTimeout(() => { + reject(new Error(t('ERROR_SOCKET_EMIT_TIMEOUT'))) + }, config.get('socketEmitTimeout')).unref() + }), + new Promise((resolve, reject) => { + const callback = (err, result) => { if (err) return reject(err) resolve(result) - }) - } - return this.socket.emit(event, (err, result) => { - if (err) return reject(err) - resolve(result) + } + if (data) { + return this.socket.emit(event, data, callback) + } + return this.socket.emit(event, callback) }) - }) + ]) } /** diff --git a/lib/config/schema.js b/lib/config/schema.js index b3c84513..2f443484 100644 --- a/lib/config/schema.js +++ b/lib/config/schema.js @@ -31,5 +31,11 @@ module.exports = { format: String, default: 'en', env: 'LOCALE' + }, + socketEmitTimeout: { + doc: 'Socket emit timeout', + format: Number, + default: 20000, + env: 'SOCKET_EMIT_TIMEOUT' } } diff --git a/lib/locales/en.json b/lib/locales/en.json index aa62258e..317ce89d 100644 --- a/lib/locales/en.json +++ b/lib/locales/en.json @@ -173,6 +173,7 @@ "lib/app/backend/BackendProcess": { "ESTABLISHING_SDK_CONNECTION": "Establishing SDK connection", "ERROR_CONNECTION_ERROR": "Connection error! Trying to reconnect...", + "ERROR_SOCKET_EMIT_TIMEOUT": "Socket emit timeout", "TRYING_TO_ATTACH_EXTENSION": "Trying to attach {extensionId} (trusted: {trusted}) ...", "EXTENSION_ATTACHED": "Extension {extensionId} (trusted: {trusted}) attached", "ERROR_ATTACHING_EXTENSION": "Error while attaching the extension {extensionId} (trusted: {trusted}): {reason}",