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] 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 f9a6f6ff4..685f633b0 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 8270a398b..718327e42 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 {