2013-08-07 35 views
5

Próbuję utworzyć grę podstawową (tylko tekst) przy użyciu pliku Node.js, a jest to biblioteka "net".
Uderzam w ścianę. Nie potrafię wymyślić, jak zachęcić użytkownika do wprowadzenia pewnych informacji i czekać, aż użytkownik wprowadzi te informacje.

Gra klienta i serwera Node.js przy użyciu usługi Telnet

Oto kod, który mam do tej pory. Jest dość prosty i po uruchomieniu klienta wydrukuje 2 linie, a następnie zawiesi się. W tym momencie chcę, aby użytkownik mógł wprowadzić informacje. Nie jestem pewien kilku rzeczy tutaj:
1. W jaki sposób mogę zezwolić użytkownikowi na wpisywanie? (dokładniej: strona klienta lub serwera).
2. Jak wysłać te dane do serwera po naciśnięciu klawisza Enter?

Przeczytałem trochę dokumentacji, jeśli chodzi o Telnet, i to prowadzi mnie do mojego ostatniego pytania: czy moduł Telnet w węźle naprawdę jest odpowiedni do tego, czy istnieje lepsza alternatywa dla tworzenia klienta/serwera i komunikacja? Kod



Klient: Kod

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



Serwer:

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


Z góry dzięki!

Odpowiedz

5
  • chcesz użyć process.stdin i process.stdout interakcję z wejścia/wyjścia z/do terminalu. Spójrz na here.
  • Dane można wysłać do serwera po naciśnięciu Enter z numerem process.stdin.once('data', function(data){ /* ... */ }). Metoda .once zapewnia, że ​​wywołanie zwrotne wywoływane jest tylko raz, gdy użytkownik wejdzie w tryb wprowadzania.

Kod klient powinien wyglądać następująco:

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