Node.js client and server game using Telnet
client-server, javascript, node.js, telnet
Solution
- you want to use `process.stdin` and `process.stdout` to interact with input/output from/to the terminal. Have a look here.
- You can send data to the server when enter is pressed with `process.stdin.once('data', function(data){ /* ... */ })`. The `.once` method ensures that the callback is called just once when the user hits enter.
The client code should look like:
var connect = require('net');
var client = connect.connect('80', 'localhost');
client.on('data', function(data) {
console.log('' + data);
process.stdin.once('data', function (chunk) {
client.write(chunk.toString());
});
}).on('connect', function() {
client.write('Hello');
}).on('end', function() {
console.log('Disconnected');
});
Problem
I'm trying to create a basic game (only text) using Node.js, and it's 'net' library. I'm hitting a bit of a wall. I can't seem to figure out how to prompt the user to enter some information, and wait for the user to enter said information. Here's the code I have so far. It's fairly basic, and will print out 2 lines for you when you run the client, and then hang. It's at that point I want the user to be able to enter information. I'm unsure of a few things here: 1. How do I enable the user to type? (more specifically, is it client or server side) 2. How do I send that data to the server when enter is pressed? I have read up on some documentation as far as Telnet goes, and it leads me to my last question: is the Telnet module in Node really the right one for this, or is there a better alternative for client/server creation and communication? Client Code: ``` var connect = require('net'); var client = connect.connect('80', 'localhost'); console.log('Connection Success!\n\n'); client.on('data', function(data) { // Log the response from the HTTP server. console.log('' + data); }).on('connect', function() { // Manually write an HTTP request. //I'm assuming I could send data at this point here, on connect? }).on('end', function() { console.log('Disconnected'); }); ``` Server Code: ``` var net = require('net'); var sockets = []; function cleanInput(data) { return data.toString().replace(/(\r\n|\n|\r)/gm,""); } function receiveData(socket, data) { var cleanData = cleanInput(data); if(cleanData === "quit") { socket.end('Goodbye!\n'); } else { for(var i = 0; i<sockets.length; i++) { if (sockets[i] !== socket) { sockets[i].write(data); } } } } function closeSocket(socket) { var i = sockets.indexOf(socket); if (i != -1) { sockets.splice(i, 1); } } function newSocket(socket) { sockets.push(socket); socket.write('Welcome to the Battleship Server!\n\n'); socket.write('Please enter a username: '); socket.on('data', function(data) { receiveData(socket, data); }) socket.on('end', function() { closeSocket(socket); }) } var server = net.createServer(newSocket); server.listen(80); ``` Thanks in advance!