From 8512c44b6403c126bf961c0fd0c2798d6bfdfcea Mon Sep 17 00:00:00 2001 From: Florrie Date: Sat, 6 Jul 2019 00:16:02 -0300 Subject: Experimental telnet server --- telnet-server.js | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 telnet-server.js (limited to 'telnet-server.js') diff --git a/telnet-server.js b/telnet-server.js new file mode 100644 index 0000000..6cee554 --- /dev/null +++ b/telnet-server.js @@ -0,0 +1,67 @@ +'use strict' + +const net = require('net') +const setupClient = require('./client') + +const { + util: { + TelnetInterfacer + } +} = require('./tui-lib') + +class TelnetServer { + constructor(backend) { + this.backend = backend + this.server = new net.Server(socket => this.handleConnection(socket)) + this.sockets = [] + } + + listen(port) { + this.server.listen(port) + } + + async handleConnection(socket) { + const interfacer = new TelnetInterfacer(socket) + const { appElement, renderInterval, cleanTerminal } = await setupClient({ + backend: this.backend, + writable: socket, + interfacer, + appConfig: { + stopPlayingUponQuit: false, + menubarColor: 2 + } + }) + + let closed = false + + const quit = (msg = 'See you!') => { + cleanTerminal() + interfacer.cleanTelnetOptions() + socket.write('\r' + msg + '\r\n') + socket.end() + this.sockets.splice(this.sockets.indexOf(socket, 1)) + closed = true + } + + appElement.on('quitRequested', quit) + + socket.on('close', () => { + if (!closed) { + clearInterval(renderInterval) + this.sockets.splice(this.sockets.indexOf(socket, 1)) + closed = true + } + }) + + socket.quit = quit + this.sockets.push(socket) + } + + disconnectAllSockets(msg) { + for (const socket of this.sockets) { + socket.quit(msg) + } + } +} + +module.exports = TelnetServer -- cgit 1.3.0-6-gf8a5