mirror of https://github.com/status-im/metro.git
[react-packager] Make sure server is listening on socket
This commit is contained in:
parent
dbdf7f366f
commit
971b70d72f
|
@ -26,6 +26,17 @@ describe('SocketInterface', () => {
|
|||
pit('creates socket path by hashing options', () => {
|
||||
const fs = require('fs');
|
||||
fs.existsSync = jest.genMockFn().mockImpl(() => true);
|
||||
fs.unlinkSync = jest.genMockFn();
|
||||
let callback;
|
||||
|
||||
require('child_process').spawn.mockImpl(() => ({
|
||||
on: (event, cb) => callback = cb,
|
||||
send: (message) => {
|
||||
setImmediate(() => callback({ type: 'createdServer' }));
|
||||
},
|
||||
unref: () => undefined,
|
||||
disconnect: () => undefined,
|
||||
}));
|
||||
|
||||
// Check that given two equivelant server options, we end up with the same
|
||||
// socket path.
|
||||
|
@ -49,6 +60,7 @@ describe('SocketInterface', () => {
|
|||
pit('should fork a server', () => {
|
||||
const fs = require('fs');
|
||||
fs.existsSync = jest.genMockFn().mockImpl(() => false);
|
||||
fs.unlinkSync = jest.genMockFn();
|
||||
let sockPath;
|
||||
let callback;
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ const SocketServer = require('./SocketServer');
|
|||
const _ = require('underscore');
|
||||
const crypto = require('crypto');
|
||||
const fs = require('fs');
|
||||
const net = require('net');
|
||||
const path = require('path');
|
||||
const tmpdir = require('os').tmpdir();
|
||||
const {spawn} = require('child_process');
|
||||
|
@ -38,10 +39,27 @@ const SocketInterface = {
|
|||
);
|
||||
|
||||
if (fs.existsSync(sockPath)) {
|
||||
var sock = net.connect(sockPath);
|
||||
sock.on('connect', () => {
|
||||
sock.end();
|
||||
resolve(SocketClient.create(sockPath));
|
||||
return;
|
||||
});
|
||||
sock.on('error', (e) => {
|
||||
fs.unlinkSync(sockPath);
|
||||
createServer(resolve, reject, options, sockPath);
|
||||
});
|
||||
} else {
|
||||
createServer(resolve, reject, options, sockPath);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
listenOnServerMessages() {
|
||||
return SocketServer.listenOnServerIPCMessages();
|
||||
}
|
||||
};
|
||||
|
||||
function createServer(resolve, reject, options, sockPath) {
|
||||
const logPath = path.join(tmpdir, 'react-packager.log');
|
||||
|
||||
const timeout = setTimeout(
|
||||
|
@ -78,11 +96,11 @@ const SocketInterface = {
|
|||
if (m && m.type && m.type === 'createdServer') {
|
||||
clearTimeout(timeout);
|
||||
child.disconnect();
|
||||
|
||||
resolve(SocketClient.create(sockPath));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if (options.blacklistRE) {
|
||||
options.blacklistRE = { source: options.blacklistRE.source };
|
||||
}
|
||||
|
@ -91,13 +109,6 @@ const SocketInterface = {
|
|||
type: 'createSocketServer',
|
||||
data: { sockPath, options }
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
listenOnServerMessages() {
|
||||
return SocketServer.listenOnServerIPCMessages();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = SocketInterface;
|
||||
|
|
Loading…
Reference in New Issue