From 6fd5cdd8f1b28e5e643d4b1d598a8832f9d3a4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 00:58:14 +0200 Subject: [PATCH 1/7] apply attach changes to demo --- demo/client.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/demo/client.ts b/demo/client.ts index 2d7c800d..affcf64c 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -27,7 +27,6 @@ declare let window: IWindowWithTerminal; Terminal.applyAddon(fit); let term; -let attachAddon: AttachAddon; let searchAddon: SearchAddon; let protocol; let socketURL; @@ -90,8 +89,6 @@ function createTerminal(): void { // Load addons const typedTerm = term as TerminalType; typedTerm.loadAddon(new WebLinksAddon()); - attachAddon = new AttachAddon(); - typedTerm.loadAddon(attachAddon); searchAddon = new SearchAddon(); typedTerm.loadAddon(searchAddon); @@ -152,7 +149,7 @@ function createTerminal(): void { } function runRealTerminal(): void { - attachAddon.attach(socket); + term.loadAddon(new AttachAddon(socket)); term._initialized = true; } From 53167df1a800000f6121bf95bc9adf44c30e181e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 01:24:41 +0200 Subject: [PATCH 2/7] document utf8 switch in client.ts --- demo/client.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/demo/client.ts b/demo/client.ts index affcf64c..f9a6f6ff 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -149,7 +149,14 @@ function createTerminal(): void { } function runRealTerminal(): void { + /** + * The demo defaults to string transport by default. + * To run it with UTF8 binary transport, swap comment on + * the lines below. (Must also be switched in server.js) + */ term.loadAddon(new AttachAddon(socket)); + //term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); + term._initialized = true; } From 67be8c36e75e735f8ed9bb590ccbeb9158922b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 01:40:54 +0200 Subject: [PATCH 3/7] utf8 switch in server.js --- demo/client.ts | 4 ++-- demo/server.js | 28 ++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/demo/client.ts b/demo/client.ts index f9a6f6ff..685f633b 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -154,8 +154,8 @@ function runRealTerminal(): void { * To run it with UTF8 binary transport, swap comment on * the lines below. (Must also be switched in server.js) */ - term.loadAddon(new AttachAddon(socket)); - //term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); + //term.loadAddon(new AttachAddon(socket)); + term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); term._initialized = true; } diff --git a/demo/server.js b/demo/server.js index 8270a398..718327e4 100644 --- a/demo/server.js +++ b/demo/server.js @@ -3,6 +3,13 @@ var expressWs = require('express-ws'); var os = require('os'); var pty = require('node-pty'); +/** + * Whether to use UTF8 binary transport. + * (Must also be switched in client.ts) + */ +const USE_BINARY_UTF8 = true; + + function startServer() { var app = express(); expressWs(app); @@ -36,7 +43,8 @@ function startServer() { cols: cols || 80, rows: rows || 24, cwd: process.env.PWD, - env: process.env + env: process.env, + encoding: USE_BINARY_UTF8 ? null : 'utf8' }); console.log('Created terminal with PID: ' + term.pid); @@ -65,6 +73,7 @@ function startServer() { console.log('Connected to terminal ' + term.pid); ws.send(logs[term.pid]); + // string message buffering function buffer(socket, timeout) { let s = ''; let sender = null; @@ -79,7 +88,22 @@ function startServer() { } }; } - const send = buffer(ws, 5); + // binary message buffering + function bufferUtf8(socket, timeout) { + let buffer = []; + let sender = null; + return (data) => { + buffer.push(data); + if (!sender) { + sender = setTimeout(() => { + socket.send(Buffer.concat(buffer)); + buffer = []; + sender = null; + }, timeout); + } + }; + } + const send = USE_BINARY_UTF8 ? bufferUtf8(ws, 5) : buffer(ws, 5); term.on('data', function(data) { try { From 1a596f9608b0ca337be5d81b1d8b0a851006eb8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 01:41:51 +0200 Subject: [PATCH 4/7] default to string transport --- demo/client.ts | 4 ++-- demo/server.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demo/client.ts b/demo/client.ts index 685f633b..f9a6f6ff 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -154,8 +154,8 @@ function runRealTerminal(): void { * To run it with UTF8 binary transport, swap comment on * the lines below. (Must also be switched in server.js) */ - //term.loadAddon(new AttachAddon(socket)); - term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); + term.loadAddon(new AttachAddon(socket)); + //term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); term._initialized = true; } diff --git a/demo/server.js b/demo/server.js index 718327e4..823dc6c6 100644 --- a/demo/server.js +++ b/demo/server.js @@ -7,7 +7,7 @@ var pty = require('node-pty'); * Whether to use UTF8 binary transport. * (Must also be switched in client.ts) */ -const USE_BINARY_UTF8 = true; +const USE_BINARY_UTF8 = false; function startServer() { From 69411916cb84c4572837d7f0cfee4e3d8913f0cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 01:45:21 +0200 Subject: [PATCH 5/7] make linter happy --- demo/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/client.ts b/demo/client.ts index f9a6f6ff..01789402 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -155,7 +155,7 @@ function runRealTerminal(): void { * the lines below. (Must also be switched in server.js) */ term.loadAddon(new AttachAddon(socket)); - //term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); + // term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); term._initialized = true; } From 58d461bb9047c9282e627a5ea323fef863112ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 13 May 2019 15:33:54 +0200 Subject: [PATCH 6/7] optimize Buffer.concat --- demo/server.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/demo/server.js b/demo/server.js index 823dc6c6..e3473400 100644 --- a/demo/server.js +++ b/demo/server.js @@ -92,13 +92,16 @@ function startServer() { function bufferUtf8(socket, timeout) { let buffer = []; let sender = null; + let length = 0; return (data) => { buffer.push(data); + length += data.length; if (!sender) { sender = setTimeout(() => { - socket.send(Buffer.concat(buffer)); + socket.send(Buffer.concat(buffer, length)); buffer = []; sender = null; + length = 0; }, timeout); } }; From b9cfbbea8fb96fd6d9201d016c5edc07c728d749 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 13 May 2019 20:34:14 -0700 Subject: [PATCH 7/7] xterm-addon-attach@0.1.0-beta8 --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index cafa43b1..043b76cb 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,13 @@ "ts-loader": "^4.5.0", "tslint": "^5.9.1", "tslint-consistent-codestyle": "^1.13.0", - "utf8": "^3.0.0", "typescript": "3.4", + "utf8": "^3.0.0", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0", "webpack": "^4.17.1", "webpack-cli": "^3.1.0", - "xterm-addon-attach": "0.1.0-beta7", + "xterm-addon-attach": "0.1.0-beta8", "xterm-addon-search": "0.1.0-beta4", "xterm-addon-web-links": "0.1.0-beta6", "zmodem.js": "^0.1.5" diff --git a/yarn.lock b/yarn.lock index 3db8e9a4..321fe6f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7236,10 +7236,10 @@ xregexp@4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= -xterm-addon-attach@0.1.0-beta7: - version "0.1.0-beta7" - resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.1.0-beta7.tgz#787f6cce709611ee08ab731b95a62fa1c0bce6a9" - integrity sha512-nQr6LcYtpZcyDoHyL/BDIPJcTgL7qlHR/rvm8lSizQysGVT0pSzr5M7SjY3kQHw33U3hTer3c6oZzwjfj4ohOw== +xterm-addon-attach@0.1.0-beta8: + version "0.1.0-beta8" + resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.1.0-beta8.tgz#e469ed9d6ab7e535d0a9ffae23ef4f2efe58163b" + integrity sha512-HtQuwqnvcR+SwI9/JbBMd//Il+oEeo3rWrIucLLKHT8sB+OAOkdhmo5KIM/hhnovjI040WJ+tTHkDgPFwIJtmw== xterm-addon-search@0.1.0-beta4: version "0.1.0-beta4"