From b0e2242c47b4f1b321f5328ba53ca26bb30983b4 Mon Sep 17 00:00:00 2001 From: Adam A Date: Fri, 22 Nov 2024 15:01:58 +0100 Subject: [PATCH] fix websocket unpause --- lib.js | 8 ++--- sync_proxy.js | 93 +++++++++++++++++++++++++-------------------------- 2 files changed, 49 insertions(+), 52 deletions(-) diff --git a/lib.js b/lib.js index 8925e2b..98cf80d 100644 --- a/lib.js +++ b/lib.js @@ -59,18 +59,18 @@ function upgradeWebSocket (req, { } } - socket.addEventListener("open", () => { - console.log("🟢 Client connected to websocket") + socket.addEventListener("open", connection => { + console.log("🟢 Control socket: client connected.") onOpen({ socket, send }) }) socket.addEventListener("close", () => { - console.log("🟠 Client disconnected from websocket") + console.log("🟠 Control socket: client disconnected.") onClose({ socket, send }) }) socket.addEventListener("message", (event) => { - console.log("🔔 Message received over websocket", event.data) + console.log("🔔 Control socket: message received:", event.data) onMessage({ socket, send, event }) }) diff --git a/sync_proxy.js b/sync_proxy.js index 7e917bd..fbf1511 100755 --- a/sync_proxy.js +++ b/sync_proxy.js @@ -28,61 +28,58 @@ async function run (localHost, controlPort, proxyConfig) { const connections = new Set() // Print the proxy config that is in use console.log('🟢 Proxy config:', JSON.stringify(proxyConfig, null, 2)) - // Launch control api - api('MultiSync', localHost, controlPort, { - // Report status - ['/'] () { - return respond(200, { canConnect, connections: connections.size }) - }, - // Enable connecting - ['/start'] () { - if (!canConnect) { - console.log('🟢 Enabling new connections') - canConnect = true - } - return respond(200, { canConnect, connections: connections.size }) - }, - // Disable connecting - ['/pause'] () { - let connectionsJustClosed = 0 - let connectionsAlreadyClosed = 0 - if (canConnect) { - console.log('🟠 Disabling new connections') - canConnect = false - } - if (connections.size > 0) { - console.log('Closing/cleaning up', connections.size, 'connection(s)') - for (const connection of connections) { - const { localAddr, remoteAddr } = connection - try { - connection.close() - console.log('Closed:', formatAddr(localAddr), '<->', formatAddr(remoteAddr)) - connectionsJustClosed++ - } catch (e) { - if (e.name === 'BadResource') { - console.log('Cleaned up:', formatAddr(localAddr), '<->', formatAddr(remoteAddr)) - connectionsAlreadyClosed++ - } else { - throw e - } + // Handler: report status + const status = () => respond(200, { canConnect, connections: connections.size }) + // Handler: enable proxy + const start = () => { + if (!canConnect) { + console.log('🟢 Enabling new connections') + canConnect = true + } + return respond(200, { canConnect, connections: connections.size }) + } + // Handler: disable proxy + const pause = () => { + let connectionsJustClosed = 0 + let connectionsAlreadyClosed = 0 + if (canConnect) { + console.log('🟠 Disabling new connections') + canConnect = false + } + if (connections.size > 0) { + console.log('Closing/cleaning up', connections.size, 'connection(s)') + for (const connection of connections) { + const { localAddr, remoteAddr } = connection + try { + connection.close() + console.log('Closed:', formatAddr(localAddr), '<->', formatAddr(remoteAddr)) + connectionsJustClosed++ + } catch (e) { + if (e.name === 'BadResource') { + console.log('Cleaned up:', formatAddr(localAddr), '<->', formatAddr(remoteAddr)) + connectionsAlreadyClosed++ + } else { + throw e } - connections.delete(connection) } + connections.delete(connection) } - return respond(200, { - canConnect, - connections: connections.size, - connectionsJustClosed, - connectionsAlreadyClosed - }) - }, - }, { - onMessage: async ({ event }) => { + } + return respond(200, { + canConnect, + connections: connections.size, + connectionsJustClosed, + connectionsAlreadyClosed + }) + } + // Launch control api + api('MultiSync', localHost, controlPort, { '/': status, '/start': start, '/pause': pause }, { + onMessage: ({ event }) => { const data = JSON.parse(event.data) console.log('WS message received:', data) if (data.resume) { console.log('🟢 Resuming sync...') - await service.start() + start() } } })