2013-08-07 41 views
5

Node.js kullanarak temel bir oyun (sadece metin) oluşturmaya çalışıyorum ve 'net' kitaplığı.
Biraz duvar alayım. Kullanıcının bazı bilgileri girmesini istemek ve kullanıcının bu bilgileri girmesini beklemek gibi bir şey göremiyorum.

Node.js istemci ve sunucu oyunu

Şimdiye kadar verdiğim kod. Oldukça basittir ve istemciyi çalıştırdığınızda 2 satırı yazdıracaktır ve sonra asılacaktır. Bu noktada, kullanıcının bilgi girmesini istiyorum. Burada birkaç şeyden emin değilim:
1. Kullanıcının yazmasını nasıl sağlayabilirim? (daha spesifik olarak, istemci veya sunucu tarafı mıdır)
2. Enter'a basıldığında bu verileri sunucuya nasıl gönderirim?

Telnet'e giderken bazı belgeleri okudum ve şu son soruya yönlendiriyorum: Düğümdeki Telnet modülü gerçekten bunun için doğru mu, yoksa istemci/sunucu oluşturma için daha iyi bir alternatif var mı? ve iletişim?



Müşteri Kodu:

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



Sunucu Kodu: önceden

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


teşekkürler!

cevap

5
  • Eğer terminale/giriş/çıkışı ile etkileşim process.stdin ve process.stdout kullanmak istiyorum. Bir göz atın here.
  • process.stdin.once('data', function(data){ /* ... */ }) ile girişe girildiğinde verileri sunucuya gönderebilirsiniz. .once yöntemi, kullanıcının girdiği zaman geri aramanın sadece bir kez çağrılmasını sağlar.

istemci kodu aşağıdaki gibi görünmelidir:

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