-
Notifications
You must be signed in to change notification settings - Fork 0
/
old.js
67 lines (49 loc) · 1.34 KB
/
old.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const net = require('net');
if (process.argv.includes('--detached')) {
const pty = require('node-pty');
let buffer = '';
const subscribers = [];
const nodePty = pty.spawn('node', []);
nodePty.onData(function (data) {
buffer += data;
for (const socket of subscribers) {
socket.write(data);
}
});
nodePty.onExit(e => process.exit(e.exitCode));
net.createServer(function (socket) {
subscribers.push(socket);
socket.write(buffer);
socket.on('data', data => {
nodePty.write(data.toString('utf8'));
})
socket.on('close', () => {
subscribers = subscribers.filter(v => v !== socket)
});
}).listen('.backdrop.sock');
} else {
try {
require('fs').accessSync('.backdrop.sock')
} catch {
const fork = require('child_process').fork(__filename, ['--detached'], { detached: true, stdio: 'ignore' });
fork.disconnect();
fork.unref();
while (true) {
try {
require('fs').accessSync('.backdrop.sock')
break;
} catch { }
}
}
const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
const connection = net.connect('.backdrop.sock');
connection.on('data', data => process.stdout.write(data));
process.stdin.on('keypress', (_, key) => {
if (key && key.shift) {
if (key.name === 'x') process.exit(0);
}
})
process.stdin.pipe(connection);
}