Skip to content

Commit

Permalink
fix websocket unpause
Browse files Browse the repository at this point in the history
  • Loading branch information
egasimus committed Nov 22, 2024
1 parent 3685754 commit b0e2242
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 52 deletions.
8 changes: 4 additions & 4 deletions lib.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 })
})

Expand Down
93 changes: 45 additions & 48 deletions sync_proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}
})
Expand Down

0 comments on commit b0e2242

Please sign in to comment.