Correctly closes connections

This commit is contained in:
Vitor Pamplona 2023-08-02 18:25:29 -04:00
parent ba8f69da04
commit 7cca63f7ea

View File

@ -51,10 +51,16 @@ function hexToBytes(hex) {
const fetchFromRelay = async (relay, filters, events) => const fetchFromRelay = async (relay, filters, events) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
try { try {
// prevent hanging forever
setTimeout(() => reject('timeout'), 300_000)
// open websocket // open websocket
const ws = new WebSocket(relay) const ws = new WebSocket(relay)
// prevent hanging forever
setTimeout(() => {
ws.close()
reject('timeout')
}, 300_000)
// subscription id // subscription id
const subsId = 'my-sub' const subsId = 'my-sub'
// subscribe to events filtered by author // subscribe to events filtered by author
@ -75,10 +81,24 @@ function hexToBytes(hex) {
$('#events-found').text(`${Object.keys(events).length} events found`) $('#events-found').text(`${Object.keys(events).length} events found`)
} }
// end of subscription messages // end of subscription messages
if (msgType === 'EOSE' && subscriptionId === subsId) resolve() if (msgType === 'EOSE' && subscriptionId === subsId) {
ws.close()
resolve()
}
}
ws.onerror = (err) => {
ws.close()
reject(err)
}
ws.onclose = (socket, event) => {
resolve()
} }
ws.onerror = (err) => reject(err)
} catch (exception) { } catch (exception) {
try {
ws.close()
} catch (exception) {
}
reject(exception) reject(exception)
} }
}) })
@ -99,18 +119,27 @@ function hexToBytes(hex) {
const sendToRelay = async (relay, data) => const sendToRelay = async (relay, data) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
try { try {
// prevent hanging forever
setTimeout(() => reject('timeout'), 20_000)
const ws = new WebSocket(relay) const ws = new WebSocket(relay)
// prevent hanging forever
setTimeout(() => {
ws.close()
reject('timeout')
}, 300_000)
// fetch events from relay // fetch events from relay
ws.onopen = () => { ws.onopen = () => {
console.log("sending ", data.length, "events to ", relay)
for (evnt of data) { for (evnt of data) {
ws.send(JSON.stringify(['EVENT', evnt])) ws.send(JSON.stringify(['EVENT', evnt]))
} }
ws.close() ws.close()
resolve(`done for ${relay}`) resolve(`done for ${relay}`)
} }
ws.onerror = (err) => reject(err) ws.onerror = (err) => {
console.log("Error", err)
reject(err)
}
} catch (exception) { } catch (exception) {
reject(exception) reject(exception)
} }