react-native/local-cli/server/util/messageSocket.js

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
};