52 lines
1.1 KiB
JavaScript
52 lines
1.1 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
'use strict';
|
|
|
|
|
|
function attachToServer(server, path) {
|
|
var WebSocketServer = require('ws').Server;
|
|
var wss = new WebSocketServer({
|
|
server: server,
|
|
path: path
|
|
});
|
|
var clients = [];
|
|
|
|
function sendFrom(source, data) {
|
|
clients.forEach((client) => {
|
|
if (client !== source) {
|
|
try {
|
|
client.send(data);
|
|
} catch (e) {
|
|
// Sometimes this call throws 'not opened'
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
wss.on('connection', function(ws) {
|
|
clients.push(ws);
|
|
ws.onclose =
|
|
ws.onerror = () => {
|
|
ws.onmessage = null;
|
|
clients = clients.filter((client) => client !== ws);
|
|
};
|
|
ws.onmessage = ({data}) => sendFrom(ws, data);
|
|
});
|
|
|
|
return {
|
|
broadcast: (message) => {
|
|
sendFrom(null, JSON.stringify(message));
|
|
}
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
attachToServer: attachToServer
|
|
};
|