diff --git a/demo/client.ts b/demo/client.ts index a3a912f6..a38b8a5c 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -134,6 +134,7 @@ function createTerminal(): void { pid = processId; socketURL += processId; socket = new WebSocket(socketURL); + socket.binaryType = 'arraybuffer'; socket.onopen = runRealTerminal; socket.onclose = runFakeTerminal; socket.onerror = runFakeTerminal; diff --git a/demo/server.js b/demo/server.js index 5ff9ca61..86bc9069 100644 --- a/demo/server.js +++ b/demo/server.js @@ -32,7 +32,8 @@ function startServer() { cols: cols || 80, rows: rows || 24, cwd: process.env.PWD, - env: process.env + env: process.env, + encoding: null }); console.log('Created terminal with PID: ' + term.pid); @@ -62,20 +63,20 @@ function startServer() { ws.send(logs[term.pid]); function buffer(socket, timeout) { - let s = ''; + let buffer = []; let sender = null; return (data) => { - s += data; + buffer.push(data); if (!sender) { sender = setTimeout(() => { - socket.send(s); - s = ''; + socket.send(Buffer.concat(buffer)); + buffer = []; sender = null; }, timeout); } }; } - const send = buffer(ws, 5); + const send = buffer(ws, 5); term.on('data', function(data) { try { diff --git a/src/addons/attach/attach.ts b/src/addons/attach/attach.ts index f121e2e2..7333f92b 100644 --- a/src/addons/attach/attach.ts +++ b/src/addons/attach/attach.ts @@ -42,6 +42,11 @@ export function attach(term: Terminal, socket: WebSocket, bidirectional: boolean addonTerminal.__getMessage = function(ev: MessageEvent): void { let str: string; + if (ev.data instanceof ArrayBuffer) { + addonTerminal.writeUtf8(new Uint8Array(ev.data)); + return; + } + if (typeof ev.data === 'object') { if (!myTextDecoder) { myTextDecoder = new TextDecoder();