fix: timeout send call

This commit is contained in:
Adhiraj Singh
2023-02-01 14:33:14 +05:30
parent 41851d9e34
commit b2c1cfbf9c
3 changed files with 15 additions and 4 deletions

View File

@@ -41,7 +41,7 @@ const startSock = async() => {
generateHighQualityLinkPreview: true, generateHighQualityLinkPreview: true,
// ignore all broadcast messages -- to receive the same // ignore all broadcast messages -- to receive the same
// comment the line below out // comment the line below out
shouldIgnoreJid: jid => isJidBroadcast(jid), // shouldIgnoreJid: jid => isJidBroadcast(jid),
// implement to handle retries // implement to handle retries
getMessage: async key => { getMessage: async key => {
if(store) { if(store) {

View File

@@ -38,6 +38,7 @@ export const makeSocket = ({
agent agent
}) })
ws.setMaxListeners(0) ws.setMaxListeners(0)
const ev = makeEventBuffer(logger) const ev = makeEventBuffer(logger)
/** ephemeral key pair used to encrypt/decrypt communication. Unique for each connection */ /** ephemeral key pair used to encrypt/decrypt communication. Unique for each connection */
const ephemeralKeyPair = Curve.generateKeyPair() const ephemeralKeyPair = Curve.generateKeyPair()
@@ -65,7 +66,17 @@ export const makeSocket = ({
} }
const bytes = noise.encodeFrame(data) const bytes = noise.encodeFrame(data)
await sendPromise.call(ws, bytes) as Promise<void> await promiseTimeout<void>(
connectTimeoutMs,
async(resolve, reject) => {
try {
await sendPromise.call(ws, bytes)
resolve()
} catch(error) {
reject(error)
}
}
)
} }
/** send a binary node */ /** send a binary node */

View File

@@ -138,13 +138,13 @@ export const delayCancellable = (ms: number) => {
export async function promiseTimeout<T>(ms: number | undefined, promise: (resolve: (v?: T)=>void, reject: (error) => void) => void) { export async function promiseTimeout<T>(ms: number | undefined, promise: (resolve: (v?: T)=>void, reject: (error) => void) => void) {
if(!ms) { if(!ms) {
return new Promise (promise) return new Promise(promise)
} }
const stack = new Error().stack const stack = new Error().stack
// Create a promise that rejects in <ms> milliseconds // Create a promise that rejects in <ms> milliseconds
const { delay, cancel } = delayCancellable (ms) const { delay, cancel } = delayCancellable (ms)
const p = new Promise ((resolve, reject) => { const p = new Promise((resolve, reject) => {
delay delay
.then(() => reject( .then(() => reject(
new Boom('Timed Out', { new Boom('Timed Out', {