diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-05-12 17:42:09 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2023-05-13 12:48:36 -0300 |
commit | 6ea74c268a12325296a1d2e7fc31b02030ddb8bc (patch) | |
tree | 5da94d93acb64e7ab650d240d6cb23c659ad02ca /examples/telnet-interface.js | |
parent | e783bcf8522fa68e6b221afd18469c3c265b1bb7 (diff) |
use ESM module syntax & minor cleanups
The biggest change here is moving various element classes under more scope-specific directories, which helps to avoid circular dependencies and is just cleaner to navigate and expand in the future. Otherwise this is a largely uncritical port to ESM module syntax! There are probably a number of changes and other cleanups that remain much needed. Whenever I make changes to tui-lib it's hard to believe it's already been <INSERT COUNTING NUMBER HERE> years since the previous time. First commits are from January 2017, and the code originates a month earlier in KAaRMNoD!
Diffstat (limited to 'examples/telnet-interface.js')
-rw-r--r-- | examples/telnet-interface.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/examples/telnet-interface.js b/examples/telnet-interface.js new file mode 100644 index 0000000..319786f --- /dev/null +++ b/examples/telnet-interface.js @@ -0,0 +1,59 @@ +// Telnet demo: +// - Basic telnet socket handling using the TelnetInterface +// - Handling client's screen size +// - Handling socket being closed by client +// - Handling cleanly closing the socket by hand + +import net from 'node:net' + +import {Root} from 'tui-lib/ui/primitives' + +import {TelnetInterface} from 'tui-lib/util/interfaces' + +import AppElement from './basic-app.js' + +const server = new net.Server(socket => { + const telnetInterface = new TelnetInterface(socket) + + telnetInterface.getScreenSize().then(size => { + const root = new Root(telnetInterface) + root.w = size.width + root.h = size.height + + telnetInterface.on('resize', 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) { + telnetInterface.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) |