70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
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()
|