import type { SocketMessage } from "#shared/websocket.util"; export default defineWebSocketHandler({ message(peer, message) { const id = new URL(peer.request.url).pathname.split('/').slice(-1)[0]; if(!id) return peer.close(); const topic = `campaigns/${id}`; const data = message.json(); switch(data.type) { case 'PING': peer.send(JSON.stringify({ type: 'PONG' })); return; case 'character': peer.publish(topic, data); peer.send(data); default: return; } }, async open(peer) { const id = new URL(peer.request.url).pathname.split('/').slice(-1)[0]; if(!id) return peer.close(); const session = await getUserSession(peer); if(!session ||!session.user) return peer.close(); peer.context.user = session.user; const topic = `campaigns/${id}`; peer.subscribe(topic); }, close(peer, details) { const id = new URL(peer.request.url).pathname.split('/').slice(-1)[0]; if(!id) return peer.close(); peer.unsubscribe(`campaigns/${id}`); } });