Skip to content

Commit

Permalink
CONNECT-446 Handle emit/acknowledgement timeouts
Browse files Browse the repository at this point in the history
  • Loading branch information
tcabolov committed Oct 4, 2019
1 parent 25b15ac commit 0bfb58e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 9 deletions.
24 changes: 15 additions & 9 deletions lib/app/backend/BackendProcess.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -125,18 +126,23 @@ class BackendProcess extends EventEmitter {
* @return {Promise<any>}
*/
_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)
})
})
])
}

/**
Expand Down
6 changes: 6 additions & 0 deletions lib/config/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
}
1 change: 1 addition & 0 deletions lib/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -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}",
Expand Down

0 comments on commit 0bfb58e

Please sign in to comment.