1
電子jsを使って泥クライアントを書くことに決めました。泥は、telnetプロトコルを使用するテキストベースのRPGゲームです。ここに私のコードは、現時点ではこれまでのところ(私はちょうどnodejsで開始)nodejsでtelnetデータを解析する方法
"use strict";
const net = require('net');
const TelnetInput = require('telnet-stream').TelnetInput;
const TelnetOutput = require('telnet-stream').TelnetOutput;
let socket = net.createConnection(6555, '198.178.123.109', function() {
let input = new TelnetInput();
let output = new TelnetOutput();
//socket.pipe(input).pipe(process.stdout);
process.stdin.pipe(output).pipe(socket);
socket.pipe(input).on('data', function(chunk) {
chunk = chunk.toString() + 'end';
let split = chunk.match(/[^\r\n]+/g);
split.forEach(function(line) {
if (line.match(/end/) == null) {
line = line + ">--\n\r";
} else {
line = line.replace('end', '');
}
process.stdout.write(line);
});
});
input.on('will', function(option) {
if (option == 201) {
output.writeDo(201);
var support = new Buffer(1);
support.write('Core.Supports.Set [ "Room 1", "Char 1", "Comm 1", "Group 1" ]', 0);
output.writeSub(201, support);
}
});
input.on('sub', function(option, buffer) {
// console.log(option);
// console.log(buffer.toString());
});
});
である私の問題は、socket.pipe(input).on('data'...
は、各ラインでトリガしないこと、であるが、それは複数行を返します。そして時にはこれらのチャンクが新しい改行で壊れることはありません。
socket.pipe(input).on('data', function(chunk) {
console.log(chunk.toString());
console.log("testing\n\r");
});
上記のコードは以下の結果を得ます。 data
イベントが2回トリガーされます。
#############################################################################
##[ --- Welcome to Aardwolf MUD --- ]##########################
##[ ]##########################
##[ Players Currently Online: 3 ]##########################
##[ ]##########################
##[ Game Last Rebooted on 06 Jun 18:21:36 ]##########################
#############################################################################
######## #######
######## #######
######## #######
######## _____ _____ ____ _____ ____ ___ ____ _____ #######
######## |_ _| ____/ ___|_ _| | _ \/_ \| _ \_ _| #######
######## | | | _| \___ \ | | | |_) | | | | |_) || | #######
######## | | | |___ ___) || | | __/| |_| | _ < | | #######
######## |_| |_____|____/ |_| |_| \___/|_| \_\|_| #######
######## #######
######## #######
######## #######
##
testing
###### #######
######## #######
#############################################################################
-----------------------------------------------------------------------------
Enter your character name or type 'NEW' to create a new character
-----------------------------------------------------------------------------
What be thy name, adventurer?
testing
私の質問は、どうすれば各行行でイベントをトリガーできますか?私はチャンクを分割することができますが、チャンクが改行で終わらない場合はどのようにして別のチャンクを連結しますか?
おそらく私のアプローチは100%間違っています。これらは私の最初のnodejs行です。