Correctly use the new xterm onBinary callback

This commit is contained in:
NI
2019-12-06 22:48:34 +08:00
parent 3aaa85f1e9
commit 7caa245df0
7 changed files with 58 additions and 12 deletions

View File

@@ -16,6 +16,7 @@ Major dependencies includes:
- [Roboto font](https://en.wikipedia.org/wiki/Roboto), Licensed under Apache license. - [Roboto font](https://en.wikipedia.org/wiki/Roboto), Licensed under Apache license.
Packaged by [Christian Hoffmeister](https://github.com/choffmeister/roboto-fontface-bower), Licensed under Apache 2.0 Packaged by [Christian Hoffmeister](https://github.com/choffmeister/roboto-fontface-bower), Licensed under Apache 2.0
- [iconv-lite](https://github.com/ashtuchkin/iconv-lite), Licensed under MIT license - [iconv-lite](https://github.com/ashtuchkin/iconv-lite), Licensed under MIT license
- [buffer](https://github.com/feross/buffer), Licensed under MIT license
## For back-end application ## For back-end application

20
package-lock.json generated
View File

@@ -3841,14 +3841,13 @@
} }
}, },
"buffer": { "buffer": {
"version": "4.9.1", "version": "5.4.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
"dev": true, "dev": true,
"requires": { "requires": {
"base64-js": "^1.0.2", "base64-js": "^1.0.2",
"ieee754": "^1.1.4", "ieee754": "^1.1.4"
"isarray": "^1.0.0"
} }
}, },
"buffer-alloc": { "buffer-alloc": {
@@ -9615,6 +9614,17 @@
"vm-browserify": "^1.0.1" "vm-browserify": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"buffer": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
"integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
"dev": true,
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
}
},
"punycode": { "punycode": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",

View File

@@ -12,6 +12,7 @@
"@babel/runtime": "^7.7.4", "@babel/runtime": "^7.7.4",
"babel-eslint": "^10.0.3", "babel-eslint": "^10.0.3",
"babel-loader": "^8.0.6", "babel-loader": "^8.0.6",
"buffer": "^5.4.3",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.0.5", "copy-webpack-plugin": "^5.0.5",
"css-loader": "^2.1.1", "css-loader": "^2.1.1",

View File

@@ -16,6 +16,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import * as iconv from "iconv-lite"; import * as iconv from "iconv-lite";
import * as buffer from "buffer/";
import Exception from "./exception.js"; import Exception from "./exception.js";
@@ -330,6 +331,18 @@ export function strToUint8Array(d) {
return r; return r;
} }
/**
* Convert string into a binary {Uint8Array}
*
* @param {string} d Input
*
* @returns {Uint8Array} Output
*
*/
export function strToBinary(d) {
return new Uint8Array(buffer.Buffer.from(d, "binary").buffer);
}
/** /**
* Parse IPv6 address. ::ffff: notation is NOT supported * Parse IPv6 address. ::ffff: notation is NOT supported
* *

View File

@@ -20,6 +20,7 @@ import * as iconv from "iconv-lite";
import * as subscribe from "../stream/subscribe.js"; import * as subscribe from "../stream/subscribe.js";
import * as reader from "../stream/reader.js"; import * as reader from "../stream/reader.js";
import * as color from "../commands/color.js"; import * as color from "../commands/color.js";
import * as common from "../commands/common.js";
class Control { class Control {
constructor(data, color) { constructor(data, color) {
@@ -125,6 +126,14 @@ class Control {
return this.sender(this.charsetEncoder(data)); return this.sender(this.charsetEncoder(data));
} }
sendBinary(data) {
if (this.closed) {
return;
}
return this.sender(common.strToBinary(data));
}
color() { color() {
return this.colors.dark; return this.colors.dark;
} }

View File

@@ -20,6 +20,7 @@ import * as iconv from "iconv-lite";
import * as subscribe from "../stream/subscribe.js"; import * as subscribe from "../stream/subscribe.js";
import * as reader from "../stream/reader.js"; import * as reader from "../stream/reader.js";
import * as color from "../commands/color.js"; import * as color from "../commands/color.js";
import * as common from "../commands/common.js";
import Exception from "../commands/exception.js"; import Exception from "../commands/exception.js";
// const maxReadBufSize = 1024; // const maxReadBufSize = 1024;
@@ -457,13 +458,8 @@ class Control {
return -1; return -1;
} }
send(data) { sendSeg(enc) {
if (this.closed) {
return;
}
let currentLen = 0; let currentLen = 0;
const enc = this.charsetEncoder(data);
while (currentLen < enc.length) { while (currentLen < enc.length) {
const iacPos = this.searchNextIAC(currentLen, enc); const iacPos = this.searchNextIAC(currentLen, enc);
@@ -481,6 +477,22 @@ class Control {
} }
} }
send(data) {
if (this.closed) {
return;
}
this.sendSeg(this.charsetEncoder(data));
}
sendBinary(data) {
if (this.closed) {
return;
}
return this.sendSeg(common.strToBinary(data));
}
color() { color() {
return this.colors.dark; return this.colors.dark;
} }

View File

@@ -104,7 +104,7 @@ class Term {
return; return;
} }
control.send(data); control.sendBinary(data);
}); });
this.term.onKey(ev => { this.term.onKey(ev => {