2013-08-07 16 views
5

Ich versuche, ein grundlegendes Spiel (nur Text) mit Node.js zu erstellen, und es ist "net" -Bibliothek.
Ich treffe ein bisschen eine Wand. Ich kann nicht herausfinden, wie ich den Benutzer auffordern soll, einige Informationen einzugeben, und darauf warten, daß der Benutzer diese Information eingibt.

Node.js Client und Server Spiel mit Telnet

Hier ist der Code, den ich bisher habe. Es ist ziemlich einfach und wird 2 Zeilen für Sie ausdrucken, wenn Sie den Client ausführen und dann hängen. An diesem Punkt möchte ich, dass der Benutzer Informationen eingeben kann. Ich bin hier ein paar Dinge unsicher:
1. Wie kann ich den Benutzer zu schreiben? (Genauer gesagt, ist es Client- oder Serverseite)
2. Wie sende ich diese Daten an den Server, wenn Enter gedrückt wird?
Ich habe einige Dokumentation gelesen, soweit Telnet geht, und es führt mich zu meiner letzten Frage: Ist das Telnet-Modul in Node wirklich der richtige dafür, oder gibt es eine bessere Alternative für die Client/Server-Erstellung und Kommunikation?



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); 


Vielen Dank im Voraus!

Antwort

5
  • wollen Sie process.stdin und process.stdout verwenden, mit Eingabe/Ausgabe von/an das Endgerät zu interagieren. Schau mal here.
  • Sie können Daten an den Server senden, wenn Enter mit process.stdin.once('data', function(data){ /* ... */ }) gedrückt wird. Die Methode .once stellt sicher, dass der Rückruf nur einmal aufgerufen wird, wenn der Benutzer auf Enter klickt.

sollte der Client-Code wie folgt aussehen:

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'); 
});