UNPKG

nuc-node-event-test

Version:
53 lines (45 loc) 1.5 kB
#!/usr/bin/env node const { Server } = require('socket.io'); const http = require('http'); const server = http.createServer(); const io = new Server(server, { cors: { origin: '*' } }); // eventType -> Set of socket ids const subscriptions = {}; io.on('connection', (socket) => { console.log('Client connected:', socket.id); socket.on('subscribe', (type) => { if (!subscriptions[type]) subscriptions[type] = new Set(); subscriptions[type].add(socket.id); console.log(`Socket ${socket.id} subscribed to ${type}`); }); socket.on('unsubscribe', (type) => { if (subscriptions[type]) { subscriptions[type].delete(socket.id); if (subscriptions[type].size === 0) delete subscriptions[type]; console.log(`Socket ${socket.id} unsubscribed from ${type}`); } }); socket.on('publish', ({ type, payload }) => { console.log(`Publish: ${type}`, payload); if (subscriptions[type]) { subscriptions[type].forEach((sid) => { if (sid !== socket.id) { io.to(sid).emit('event', { type, payload }); } }); } }); socket.on('disconnect', () => { Object.keys(subscriptions).forEach((type) => { subscriptions[type].delete(socket.id); if (subscriptions[type].size === 0) delete subscriptions[type]; }); console.log('Client disconnected:', socket.id); }); }); const PORT = process.env.PORT || 8080; server.listen(PORT, () => { console.log(`Event server listening on port ${PORT}`); });