5

Node.js を使用して基本的なゲーム (テキストのみ) を作成しようとしていますが、それは「net」ライブラリです。
ちょっと壁にぶち当たります。ユーザーに情報を入力するように促し、ユーザーがその情報を入力するのを待つ方法がわかりません。

ここに私がこれまで持っているコードがあります。これはかなり基本的なもので、クライアントを実行すると 2 行が表示され、ハングします。その時点で、ユーザーが情報を入力できるようにしたいと考えています。ここでいくつか不明な点があります:
1. ユーザーが入力できるようにするにはどうすればよいですか? (より具体的には、クライアント側かサーバー側か)
2. Enter キーが押されたときにそのデータをサーバーに送信するにはどうすればよいですか?

Telnet に関するドキュメントをいくつか読んだところ、最後の質問にたどり着きました。Node.js の Telnet モジュールは本当にこれに適しているのでしょうか。それとも、クライアント/サーバーの作成と通信のためのより良い代替手段はありますか?



クライアントコード:

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



サーバーコード:

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


前もって感謝します!

4

1 に答える 1

6
  • ターミナルから/への入出力を使用process.stdinおよび操作したい。こちらprocess.stdoutをご覧ください。
  • でEnterキーを押すと、サーバーにデータを送信できますprocess.stdin.once('data', function(data){ /* ... */ })。この.onceメソッドは、ユーザーが Enter キーを押したときにコールバックが 1 回だけ呼び出されるようにします。

クライアント コードは次のようになります。

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');
});
于 2013-08-07T08:31:17.223 に答える