Implement buffered attaching

Fixes #21
This commit is contained in:
Paris 2015-02-24 20:55:52 +02:00
parent 6cfd957697
commit 932ab00a53

View File

@ -1,7 +1,7 @@
/*
* Implements the attach method, that
* attaches the terminal to a WebSocket stream.
*
*
* The bidirectional argument indicates, whether the terminal should
* send data to the socket as well and is true, by default.
*/
@ -15,20 +15,40 @@
} else {
/*
* Plain browser environment
*/
*/
attach(this.Xterm);
}
})(function (Xterm) {
Xterm.prototype.attach = function (socket, bidirectional) {
Xterm.prototype.attach = function (socket, bidirectional, buffered) {
var term = this;
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
this.socket = socket;
term._getMessage = function (ev) {
term.write(ev.data);
term._flushBuffer = function () {
term.write(term._attachSocketBuffer);
term._attachSocketBuffer = null;
clearTimeout(term._attachSocketBufferTimer);
term._attachSocketBufferTimer = null;
};
term._pushToBuffer = function (data) {
if (term._attachSocketBuffer) {
term._attachSocketBuffer += data;
} else {
term._attachSocketBuffer = data;
setTimeout(term._flushBuffer, 10);
}
};
term._getMessage = function (ev) {
if (buffered) {
term._pushToBuffer(ev.data);
} else {
term.write(ev.data);
}
};
term._sendData = function (data) {
socket.send(data);
};
@ -38,11 +58,11 @@
if (bidirectional) {
this.on('data', term._sendData);
}
socket.addEventListener('close', term.detach.bind(term, socket));
socket.addEventListener('error', term.detach.bind(term, socket));
};
Xterm.prototype.detach = function (socket) {
var term = this;