Skip to content

Instantly share code, notes, and snippets.

@g4rcez
Created March 10, 2018 21:27
Show Gist options
  • Save g4rcez/a242438528c8c302ed2731e323166e49 to your computer and use it in GitHub Desktop.
Save g4rcez/a242438528c8c302ed2731e323166e49 to your computer and use it in GitHub Desktop.
Minirc with Node JS
let net = require('net');
let address,
os = require('os'),
ifaces = os.networkInterfaces();
for (let dev in ifaces) {
let iface = ifaces[dev].filter(function(details) {
return details.family === 'IPv4' && details.internal === false;
});
if (iface.length > 0) address = iface[0].address;
}
filterArgument = (argumentArray, search) => {
return argumentArray
.filter(item => item.startsWith(search))
.toString()
.split('=')[1];
};
definePort = port => {
return port < 65535 && port > 1024 ? port : 1337;
};
const arguments = process.argv.slice(2);
let port = !!filterArgument(arguments, '-p') ? filterArgument(arguments, '-p') : filterArgument(arguments, '--port');
let nick = !!filterArgument(arguments, '-n') ? filterArgument(arguments, '-n') : filterArgument(arguments, '--nick');
let host = !!filterArgument(arguments, '-h') ? filterArgument(arguments, '-h') : filterArgument(arguments, '--host');
port = definePort(port);
let client = net.connect(port, host);
client.on('connect', function() {
client.write('New client on chat');
});
client.on('data', function(message) {
console.log(message.toString());
});
client.on('end', function() {
console.log("The server has been destroy")
process.exit();
});
process.stdin.on('readable', function() {
let message = process.stdin.read();
if (!message) return;
message = message.toString().replace(/\n/, '');
client.write(`${message}`);
});
@g4rcez
Copy link
Author

g4rcez commented Mar 10, 2018

var net = require('net');
var connections = [];
const arguments = process.argv.slice(2);
filterArgument = (argumentArray, search) => {
	return argumentArray
		.filter(item => item.startsWith(search))
		.toString()
		.split('=')[1];
};
definePort = port => {
	return port < 65535 && port > 1024 ? port : 1337;
};
let port = !!filterArgument(arguments, '-p') ? filterArgument(arguments, '-p') : filterArgument(arguments, '--port');
port = definePort(port);

console.log('Server start at', port);

var broadcast = function(message, origin) {
	connections.forEach(function(connection) {
		if (connection === origin) return;
		connection.write(message);
	});
};
net
	.createServer(function(connection) {
		connections.push(connection);
		connection.on('data', function(message) {
			var command = message.toString();
			if (command.startsWith('/nickname')) {
				var nickname = command.replace('/nickname ', '');
				broadcast(connection.nickname + ' is now ' + nickname);
				connection.nickname = nickname;
				return;
			}
			if (!connection.nickname) {
				connection.nickname = `user_${Math.trunc(Math.random() * 100)}`;
			}
			broadcast(connection.nickname + ' >>> ' + message, connection);
		});
		connection.on('end', function() {
			broadcast(connection.nickname + ' has left!', connection);
			connections.splice(connections.indexOf(connection), 1);
		});
	})
	.listen(port);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment