Skip to content

Instantly share code, notes, and snippets.

@prohazko2
Last active February 12, 2019 21:41
Show Gist options
  • Save prohazko2/31a50f41b088e4948481de13804b5dfc to your computer and use it in GitHub Desktop.
Save prohazko2/31a50f41b088e4948481de13804b5dfc to your computer and use it in GitHub Desktop.
const net = require('net');
const repl = require('repl').start('> ');
const sockets = repl.context.sockets = [];
const loggerFor = socket => msg => {
const idx = sockets.indexOf(socket);
const name = socket.remoteAddress;
const [time] = new Date().toISOString().replace('T', ' ').split('.');
console.log(`[${idx + 1}/${sockets.length}] ${time} ${name} - ${msg}`);
}
const server = net.createServer(socket => {
const log = loggerFor(socket);
repl.context.socket = socket;
sockets.push(socket);
log('connected');
server.forEach && server.forEach(socket);
socket.on('data', data => {
const format = server.outFormat || socket.outFormat || 'hex';
let recv = data.toString(format);
if (format === 'ascii' || format == 'text') {
recv = JSON.stringify(recv || '').slice(1, -1);
}
log(`recv[${format}]: ${recv}`);
});
const onEnd = (event, error) => {
if (socket._logged) return;
socket._logged = true;
log([event, (error || '').toString()].filter(x => !!x).join(' '));
const idx = sockets.indexOf(socket);
idx >= 0 && sockets.splice(idx, 1);
repl.context.socket = sockets[sockets.length - 1];
};
socket.on('end', () => onEnd('end'));
socket.on('close', () => onEnd('close'));
socket.on('error', (err) => onEnd('error', err));
});
repl.context.server = server;
server.outFormat = 'ascii';
server.listen(1884);
server.forEach = socket => {/** do nothing */ };
/**
* server.forEach = socket => {
* const client = new net.Socket();
* client.connect(3001);
* client.pipe(socket).pipe(client);
* }
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment