in packages/relay-devtools-core/src/standalone.js [183:251]
function startServer(port?: number = 8097) {
const httpServer = require('http').createServer();
const server = new Server({ server: httpServer });
let connected: WebSocket | null = null;
server.on('connection', (socket: WebSocket) => {
if (connected !== null) {
connected.close();
log.warn(
'Only one connection allowed at a time.',
'Closing the previous connection'
);
}
connected = socket;
socket.onerror = error => {
connected = null;
onDisconnected();
log.error('Error with websocket connection', error);
};
socket.onclose = () => {
connected = null;
onDisconnected();
log('Connection to RN closed');
};
initialize(socket);
});
server.on('error', event => {
onError(event);
log.error('Failed to start the DevTools server', event);
startServerTimeoutID = setTimeout(() => startServer(port), 1000);
});
httpServer.on('request', (request, response) => {
// NPM installs should read from node_modules,
// But local dev mode needs to use a relative path.
const basePath = existsSync('./node_modules/relay-devtools-core')
? 'node_modules/relay-devtools-core'
: '../relay-devtools-core';
// Serve a file that immediately sets up the connection.
const backendFile = readFileSync(`${basePath}/dist/backend.js`);
response.end(
backendFile.toString() +
'\n;' +
'RelayDevToolsBackend.connectToDevTools();'
);
});
httpServer.on('error', event => {
onError(event);
statusListener('Failed to start the server.');
startServerTimeoutID = setTimeout(() => startServer(port), 1000);
});
httpServer.listen(port, () => {
statusListener('The server is listening on the port ' + port + '.');
});
return {
close: function() {
connected = null;
onDisconnected();
clearTimeout(startServerTimeoutID);
server.close();
httpServer.close();
},
};
}