const WebSocketServer = require('websocket').server const http = require('http') const bonjour = require('bonjour')() const sockets = new Set() const services = {} const server = http.createServer(function(request, response) { console.log((new Date()) + ' Received request for ' + request.url) response.writeHead(404) response.end() }) server.listen(3080, '127.0.0.1', () => { console.log((new Date()) + ' Server is listening on port 3080') }) wsServer = new WebSocketServer({ httpServer: server, autoAcceptConnections: false, }) function originIsAllowed() { return true } wsServer.on('request', (request) => { if (!originIsAllowed(request.origin)) { request.reject() console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.') return } const connection = request.accept('', request.origin) sockets.add(connection) sendServiceInfo(connection) console.log((new Date()) + ' Connection accepted.') connection.on('message', function(message) { if (message.type === 'utf8') { console.log('Received Message: ' + message.utf8Data) if (message.utf8Data === 'sync') sendServiceInfo(connection) } }) connection.on('close', function() { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.') }) }) function sendServiceInfo(sock, service) { const srvs = service ? [service] : Object.values(services) for (const srv of srvs) sock.sendUTF(JSON.stringify(srv)) } function discoverServices() { bonjour.find({type: 'platypush-http'}, (service) => { services[service.name] = service for (const socket of sockets) { sendServiceInfo(socket, service) } }) } discoverServices()