我试图使用readline和net编写一个简单的终端IRC客户端。
使用client.write()发送命令非常正常,除非我在readline.on('line' (cb) => cbstuff)
中执行此命令,但我不确定为什么。
我对可能的问题有两种想法,但不知道如何解决其中的任何一种:我的第一个猜测是,我必须更改rl.createInterface()的某些内容才能与客户端一起使用,而不是stin / stdout。我的第二个怀疑是,由于\ n或\ r \ n在某处被过滤/转义,因此readline从未看到回车符。另一方面,直接在client.write()中发送\ r \ n可以像多行消息一样工作。
这是我的代码:
const net = require('net');
const fs = require('fs');
const readline = require('readline');
const host = 'irc.freenode.net';
const port = 6666;
const client = new net.Socket();
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
client.connect(port, host, () => {
console.log(`CONNECTED TO: ${host}:${port}\n`);
client.write('USER foo bar batz boo\r\nNICK nodetest123\r\n');
client.write('JOIN #testchan123\r\n');
rl.on('line', cmd => client.write(cmd));
// rl.prompt(); doesn't help
});
client.on('data', data => {
console.log(`DATA: ${data}`);
fs.appendFile("log.txt", data, err => {
if (err)
return console.log(err);
});
});
client.on('error', error => console.log(error));
client.on('close', () => console.log('Connection closed'));