braindrops.nicwands.com/backend/src/websocket.js
2026-07-23 15:27:12 -04:00

65 lines
1.5 KiB
JavaScript

/**
* Create WebSocket handler for Bun server
* @param {Object} dropApis - Map of dropName -> { websocket }
* @returns {Object} WebSocket handler
*/
export function createWebSocketHandler(dropApis) {
return {
/**
* Called when a new WebSocket connection is opened
*/
open(ws) {
const { dropName } = ws.data
const dropWs = dropApis[dropName]?.websocket
if (dropWs && dropWs.open) {
dropWs.open(ws)
}
// Subscribe to drop-specific channel
ws.subscribe(dropName)
console.log(`🔌 WebSocket connected: ${dropName}`)
},
/**
* Called when a message is received
*/
message(ws, message) {
const { dropName } = ws.data
const dropWs = dropApis[dropName]?.websocket
if (dropWs && dropWs.message) {
dropWs.message(ws, message)
}
},
/**
* Called when connection is closed
*/
close(ws, code, reason) {
const { dropName } = ws.data
const dropWs = dropApis[dropName]?.websocket
if (dropWs && dropWs.close) {
dropWs.close(ws, code, reason)
}
console.log(`🔌 WebSocket disconnected: ${dropName}`)
},
/**
* Called when there's an error
*/
error(ws, error) {
const { dropName } = ws.data
const dropWs = dropApis[dropName]?.websocket
if (dropWs && dropWs.error) {
dropWs.error(ws, error)
}
console.error(`🔌 WebSocket error (${dropName}):`, error)
}
}
}