From fae22e929cbedb7ec596a00a11d968251dd8d3ea Mon Sep 17 00:00:00 2001 From: Jakob Rosenberg Date: Thu, 10 Mar 2022 09:36:08 +0100 Subject: [PATCH] refactor: fixes onTerminalData getting hijacked --- src/Device.js | 15 +++++++++++++-- src/terminal/Server.js | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Device.js b/src/Device.js index 73dbb387..dc4aeced 100644 --- a/src/Device.js +++ b/src/Device.js @@ -69,10 +69,20 @@ class Device { } /** - * Handles data from this.adapter.onTerminalData + * Proxies data from this.adapter.onTerminalData + * Can be wrapped and extended * @param {string} data */ - onTerminalData(data) {} + onTerminalData(data){} + + /** + * Server.js will reactively assign this callback to the currently active terminal + * Therefore any wrapping or extending of this method will be lost whenever a terminal is used + * @param {string} data + */ + __onTerminalDataExclusive(data) {} + + async updateConnection() { if (this.online && !this.connected) { @@ -112,6 +122,7 @@ class Device { const adapter = createBlockingProxy(rawAdapter, { exceptions: ["sendData"] }); adapter.onTerminalData = (data) => { + this.__onTerminalDataExclusive(data); this.onTerminalData(data); this.terminalLogFile.write(data); }; diff --git a/src/terminal/Server.js b/src/terminal/Server.js index 532c23cf..753dd951 100644 --- a/src/terminal/Server.js +++ b/src/terminal/Server.js @@ -37,7 +37,7 @@ class Server { this.log.debug('received', data.toString()) device.adapter.sendData(data); // make sure device data is sent to the last active terminal - device.onTerminalData = (data) => socket.write(data); + device.__onTerminalDataExclusive = (data) => socket.write(data); }); socket.on("error", (err) => {