r3-websocket/index.js

96 lines
2.3 KiB
JavaScript

const WebSocket = require('ws');
const config = require('./config');
const http = require('http');
var wss = null;
var server = http.createServer(
function(req, res) {
res.setHeader('Content-Type', 'application/json');
wss.clients.forEach(
function(client){
if (client.readyState === WebSocket.OPEN) {
var cache = [];
res.write(
JSON.stringify(client,
function(key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// Duplicate reference found
try {
// If this value does not reference a parent it can be deduped
return JSON.parse(JSON.stringify(value));
} catch (error) {
// discard key if value cannot be deduped
return;
}
}
// Store value in our collection
cache.push(value);
}
return value;
}
)
);
cache = null;
}
}
);
res.end();
}
);
wss = new WebSocket.Server(
{
server : server,
perMessageDeflate: false
}
);
server.on(
'listening',
function() {
var address = server.address();
console.log(
'R3 Websocket Server started listening on ' + address.address +
':' + address.port,
'(' + address.family + ')'
);
}
);
wss.on(
'connection',
function connection(websocket) {
websocket.on('message', function incoming(message) {
console.log('received: %s', message);
});
websocket.send('something');
}
);
server.listen(config.websocket.port);