简体   繁体   中英

Remote Shell Application Node.js

I have programmed a Remote Shell Application (TCP server) in NodeJS using the .net and .readline modules. Clients can connect to the server using the Telnet command console. But I'm having trouble implementing the rl.log method which doesn't write anything in the client shell. The other files (cmds_user.js, cmds_quiz, js, cmds_favs.js) are not relevant, they work perfectly when running the program locally (without the TCP Server implementation).

const net = require('net');
const user = require("./cmds_user.js");
const quiz = require("./cmds_quiz.js");
const favs = require("./cmds_favs.js");
const readline = require('readline');

let port = 8080;

let server = net.createServer((socket) =>{

  let rl = readline.createInterface({
    input:socket,
    output:socket,
    prompt: ">"
  });

  socket.on('end',()=>{rl.close();});
  socket.on('error',()=>{rl.close();});

  rl.log = async (msg) => {
    await rl.write(msg);
  };

  rl.prompt();

  rl.questionP = async function (string) {   // Add questionP to rl interface
    return new Promise ( (resolve) => {
      this.question(`  ${string}: `, (answer) => resolve(answer.trim()))
    })
  };

  rl.on('line', async (line) => {
    try{
      let cmd = line.trim()

      if      ('' ===cmd)   {}
      else if ('h' ===cmd)  { user.help(rl);}

      else if (['lu', 'ul', 'u'].includes(cmd)) { await user.list(rl);}
      else if (['cu', 'uc'].includes(cmd))      { await user.create(rl);}
      else if (['ru', 'ur', 'r'].includes(cmd)) { await user.read(rl);}
      else if (['uu'].includes(cmd))            { await user.update(rl);}
      else if (['du', 'ud'].includes(cmd))      { await user.delete(rl);}

      else if (['lq', 'ql', 'q'].includes(cmd)) { await quiz.list(rl);}
      else if (['cq', 'qc'].includes(cmd))      { await quiz.create(rl);}
      else if (['tq', 'qt', 't'].includes(cmd)) { await quiz.test(rl);}
      else if (['uq', 'qu'].includes(cmd))      { await quiz.update(rl);}
      else if (['dq', 'qd'].includes(cmd))      { await quiz.delete(rl);}

      else if (['lf', 'fl', 'f'].includes(cmd)) { await favs.list(rl);}
      else if (['cf', 'fc'].includes(cmd))      { await favs.create(rl);}
      else if (['df', 'fd'].includes(cmd))      { await favs.delete(rl);}

      else if ('e'===cmd)                       { rl.log('Bye!'); socket.destroy()}
      else                                      { rl.log('UNSUPPORTED COMMAND!'); user.help(rl);}

    } catch (err) {
      rl.log(`  ${err}`);
    } finally {
      rl.prompt();
    }
  });

});
server.listen(port);

SOLUTION:

rl.log = (msg) => {socket.write(`${msg}\n`);};

解决方案

rl.log = (msg) => {socket.write(`${msg}\n`);};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM