From 91aa8c51fc3bdf04e4cb0f7712ceed5719686f46 Mon Sep 17 00:00:00 2001 From: Felipe Gasper Date: Mon, 11 Sep 2017 00:01:07 -0400 Subject: [PATCH] got it --- demo/app.js | 2 +- demo/main.js | 70 +++++++++++++++++++++++++++++++++++++++++++++++---- demo/zmodemjs | 2 +- package.json | 2 +- 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/demo/app.js b/demo/app.js index 089ccf6e..0c137a1d 100644 --- a/demo/app.js +++ b/demo/app.js @@ -29,6 +29,7 @@ app.post('/terminals', function (req, res) { var cols = parseInt(req.query.cols), rows = parseInt(req.query.rows), term = pty.spawn(process.platform === 'win32' ? 'cmd.exe' : 'bash', [], { + encoding: null, name: 'xterm-color', cols: cols || 80, rows: rows || 24, @@ -63,7 +64,6 @@ app.ws('/terminals/:pid', function (ws, req) { ws.send(logs[term.pid]); term.on('data', function(data) { -console.log("From PTY: ", escape(data) ); try { ws.send(data); } catch (ex) { diff --git a/demo/main.js b/demo/main.js index c1d4d4e9..38124de7 100644 --- a/demo/main.js +++ b/demo/main.js @@ -106,6 +106,7 @@ function createTerminal() { window.pid = pid; socketURL += pid; socket = new WebSocket(socketURL); + socket.binaryType = "arraybuffer"; socket.onopen = runRealTerminal; socket.onclose = runFakeTerminal; socket.onerror = runFakeTerminal; @@ -116,21 +117,79 @@ function createTerminal() { }, 0); } +//---------------------------------------------------------------------- +// UI STUFF + +function _show_file_info(xfer) { + var file_info = xfer.get_details(); + + document.getElementById("name").textContent = file_info.name; + document.getElementById("size").textContent = file_info.size; + document.getElementById("mtime").textContent = file_info.mtime; + document.getElementById("files_remaining").textContent = file_info.files_remaining; + document.getElementById("bytes_remaining").textContent = file_info.bytes_remaining; + + document.getElementById("mode").textContent = "0" + file_info.mode.toString(8); + + document.getElementById("zm_file").style.display = ""; +} +function _hide_file_info() { + document.getElementById("zm_file").style.display = "none"; +} + +function _download(xfer, buffer) { + var uint8array = new Uint8Array(buffer); + var blob = new Blob([uint8array]); + var url = URL.createObjectURL(blob); + + var el = document.createElement("a"); + el.style.display = "none"; + el.href = url; + el.download = xfer.get_details().name; + document.body.appendChild(el); + + //It seems like a security problem that this actually works. + //But, hey. + el.click(); +} + +function _update_progress(xfer) { + document.getElementById("zm_progress").style.display = ""; + + var total_in = xfer.get_offset(); + + document.getElementById("bytes_received").textContent = total_in; + + var percent_received = 100 * total_in / xfer.get_details().size; + document.getElementById("percent_received").textContent = percent_received; +} + +// END UI STUFF +//---------------------------------------------------------------------- + var text_encoder = new TextEncoder(); var zsentry = new Zmodem.Sentry(); var zsession; function handleWSMessage(evt) { - var binary = text_encoder.encode(evt.data); - var input = Array.prototype.slice.call( new Uint8Array(binary) ); -console.log("from WS", evt.data, input, evt.data.charCodeAt( evt.data.length - 2 )); + var input = Array.prototype.slice.call( + new Uint8Array( + (typeof evt.data === "string") ? text_encoder.encode(evt.data) : evt.data + ) + ); if (zsession) { zsession.consume(input); if (zsession.has_ended()) { - input = zsession.get_trailing_bytes(); + if (zsession.type === "receive") { + input = zsession.get_trailing_bytes(); + } + else { + input = []; + } zsession = null; } + else input = []; //keep ZMODEM from going to the terminal } else { let termbytes; @@ -140,7 +199,8 @@ console.log("from WS", evt.data, input, evt.data.charCodeAt( evt.data.length - 2 if (zsession) { zsession.set_sender( (octets) => { - socket.send( String.fromCharCode.apply(String, octets) ); + //socket.send( String.fromCharCode.apply(String, octets) ); + socket.send( new Uint8Array(octets) ); } ); var start_form = document.getElementById("zm_start"); diff --git a/demo/zmodemjs b/demo/zmodemjs index eefc61c2..7220230d 160000 --- a/demo/zmodemjs +++ b/demo/zmodemjs @@ -1 +1 @@ -Subproject commit eefc61c2c4cbad743dea53b417a4948a08b7b652 +Subproject commit 7220230d12ce5eb4c42c59442a5924d98abc1c1f diff --git a/package.json b/package.json index f32918df..dc1e47ae 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "jsdoc": "3.4.3", "jsdom": "^11.1.0", "merge-stream": "^1.0.1", - "node-pty": "^0.4.1", + "node-pty": "0.6.4", "nodemon": "1.10.2", "sorcery": "^0.10.0", "tslint": "^4.0.2",