From 769413468e88acba1a180baa0113139d929a3b9f Mon Sep 17 00:00:00 2001 From: liam4 Date: Mon, 3 Jul 2017 18:59:57 -0300 Subject: A long-due cleanup + examples + things ..Obviously this breaks old things (particularly, see changes in FocusElement). --- examples/interfacer-telnet.js | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 examples/interfacer-telnet.js (limited to 'examples/interfacer-telnet.js') diff --git a/examples/interfacer-telnet.js b/examples/interfacer-telnet.js new file mode 100644 index 0000000..8cb804b --- /dev/null +++ b/examples/interfacer-telnet.js @@ -0,0 +1,56 @@ +// Telnet demo: +// - Basic telnet socket handling using the TelnetInterfacer +// - Handling client's screen size +// - Handling socket being closed by client +// - Handling cleanly closing the socket by hand + +const net = require('net') +const Root = require('../ui/Root') +const TelnetInterfacer = require('../TelnetInterfacer') +const AppElement = require('./basic-app') + +const server = new net.Server(socket => { + const interfacer = new TelnetInterfacer(socket) + + interfacer.getScreenSize().then(size => { + const root = new Root(interfacer) + root.w = size.width + root.h = size.height + + interfacer.on('screenSizeUpdated', newSize => { + root.w = newSize.width + root.h = newSize.height + root.fixAllLayout() + }) + + const appElement = new AppElement() + root.addChild(appElement) + root.select(appElement) + + let closed = false + + appElement.on('quitRequested', () => { + if (!closed) { + interfacer.cleanTelnetOptions() + socket.write('Goodbye!\n') + socket.end() + clearInterval(interval) + closed = true + } + }) + + socket.on('close', () => { + if (!closed) { + clearInterval(interval) + closed = true + } + }) + + const interval = setInterval(() => root.render(), 100) + }).catch(error => { + console.error(error) + process.exit(1) + }) +}) + +server.listen(8008) -- cgit 1.3.0-6-gf8a5