summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsamhed <samuel@cendio.se>2016-06-02 15:09:00 +0200
committersamhed <samuel@cendio.se>2016-06-03 16:32:28 +0200
commit89d2837fa8e3f0498bbac7b7194f453d88bcbc1f (patch)
treee175615ab5bade5bcd9eefc7b289186cbecc71ee
parentb1538a0fa4d9e6e98fdd06eed1a8699d11c8fdc0 (diff)
downloadnovnc-89d2837fa8e3f0498bbac7b7194f453d88bcbc1f.tar.gz
Always flush socket after each message
Make sure our messages go away right away, rather than having to remember to call flush from the caller, or causing extra delays by waiting for the send timer. This should result in a more responsive system.
-rw-r--r--include/rfb.js25
-rw-r--r--tests/test.rfb.js35
2 files changed, 22 insertions, 38 deletions
diff --git a/include/rfb.js b/include/rfb.js
index fa2401d..14e0aa6 100644
--- a/include/rfb.js
+++ b/include/rfb.js
@@ -67,7 +67,6 @@ var RFB;
this._display = null; // Display object
this._keyboard = null; // Keyboard input handler object
this._mouse = null; // Mouse input handler object
- this._sendTimer = null; // Send Queue check timer
this._disconnTimer = null; // disconnection timer
this._msgTimer = null; // queued handle_msg timer
@@ -268,8 +267,6 @@ var RFB;
RFB.messages.keyEvent(this._sock, XK_Delete, 0);
RFB.messages.keyEvent(this._sock, XK_Alt_L, 0);
RFB.messages.keyEvent(this._sock, XK_Control_L, 0);
-
- this._sock.flush();
},
xvpOp: function (ver, op) {
@@ -303,14 +300,11 @@ var RFB;
RFB.messages.keyEvent(this._sock, code, 1);
RFB.messages.keyEvent(this._sock, code, 0);
}
-
- this._sock.flush();
},
clipboardPasteFrom: function (text) {
if (this._rfb_state !== 'normal') { return; }
RFB.messages.clientCutText(this._sock, text);
- this._sock.flush();
},
// Requests a change of remote desktop size. This message is an extension
@@ -386,11 +380,6 @@ var RFB;
},
_cleanupSocket: function (state) {
- if (this._sendTimer) {
- clearInterval(this._sendTimer);
- this._sendTimer = null;
- }
-
if (this._msgTimer) {
clearInterval(this._msgTimer);
this._msgTimer = null;
@@ -564,7 +553,6 @@ var RFB;
_handleKeyPress: function (keysym, down) {
if (this._view_only) { return; } // View only, skip keyboard, events
RFB.messages.keyEvent(this._sock, keysym, down);
- this._sock.flush();
},
_handleMouseButton: function (x, y, down, bmask) {
@@ -670,10 +658,6 @@ var RFB;
this._rfb_version = this._rfb_max_version;
}
- // Send updates either at a rate of 1 update per 50ms, or
- // whatever slower rate the network can handle
- this._sendTimer = setInterval(this._sock.flush.bind(this._sock), 50);
-
var cversion = "00" + parseInt(this._rfb_version, 10) +
".00" + ((this._rfb_version * 10) % 10);
this._sock.send_string("RFB " + cversion + "\n");
@@ -992,7 +976,6 @@ var RFB;
this._timing.fbu_rt_start = (new Date()).getTime();
this._timing.pixels = 0;
- this._sock.flush();
if (this._encrypt) {
this._updateState('normal', 'Connected (encrypted) to: ' + this._fb_name);
@@ -1095,7 +1078,6 @@ var RFB;
var ret = this._framebufferUpdate();
if (ret) {
RFB.messages.fbUpdateRequests(this._sock, this._display.getCleanDirtyReset(), this._fb_width, this._fb_height);
- this._sock.flush();
}
return ret;
@@ -1285,6 +1267,7 @@ var RFB;
buff[offset + 7] = keysym;
sock._sQlen += 8;
+ sock.flush();
},
pointerEvent: function (sock, x, y, mask) {
@@ -1302,6 +1285,7 @@ var RFB;
buff[offset + 5] = y;
sock._sQlen += 6;
+ sock.flush();
},
// TODO(directxman12): make this unicode compatible?
@@ -1327,6 +1311,7 @@ var RFB;
}
sock._sQlen += 8 + n;
+ sock.flush();
},
setDesktopSize: function (sock, width, height, id, flags) {
@@ -1362,6 +1347,7 @@ var RFB;
buff[offset + 23] = flags;
sock._sQlen += 24;
+ sock.flush();
},
pixelFormat: function (sock, bpp, depth, true_color) {
@@ -1397,6 +1383,7 @@ var RFB;
buff[offset + 19] = 0; // padding
sock._sQlen += 20;
+ sock.flush();
},
clientEncodings: function (sock, encodings, local_cursor, true_color) {
@@ -1431,6 +1418,7 @@ var RFB;
buff[offset + 3] = cnt;
sock._sQlen += j - offset;
+ sock.flush();
},
fbUpdateRequests: function (sock, cleanDirty, fb_width, fb_height) {
@@ -1477,6 +1465,7 @@ var RFB;
buff[offset + 9] = h & 0xFF;
sock._sQlen += 10;
+ sock.flush();
}
};
diff --git a/tests/test.rfb.js b/tests/test.rfb.js
index 0815904..aed339c 100644
--- a/tests/test.rfb.js
+++ b/tests/test.rfb.js
@@ -132,7 +132,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
});
it('should sent ctrl[down]-alt[down]-del[down] then del[up]-alt[up]-ctrl[up]', function () {
- var expected = {_sQ: new Uint8Array(48), _sQlen: 0};
+ var expected = {_sQ: new Uint8Array(48), _sQlen: 0, flush: function () {}};
RFB.messages.keyEvent(expected, 0xFFE3, 1);
RFB.messages.keyEvent(expected, 0xFFE9, 1);
RFB.messages.keyEvent(expected, 0xFFFF, 1);
@@ -168,14 +168,14 @@ describe('Remote Frame Buffer Protocol Client', function() {
});
it('should send a single key with the given code and state (down = true)', function () {
- var expected = {_sQ: new Uint8Array(8), _sQlen: 0};
+ var expected = {_sQ: new Uint8Array(8), _sQlen: 0, flush: function () {}};
RFB.messages.keyEvent(expected, 123, 1);
client.sendKey(123, true);
expect(client._sock).to.have.sent(expected._sQ);
});
it('should send both a down and up event if the state is not specified', function () {
- var expected = {_sQ: new Uint8Array(16), _sQlen: 0};
+ var expected = {_sQ: new Uint8Array(16), _sQlen: 0, flush: function () {}};
RFB.messages.keyEvent(expected, 123, 1);
RFB.messages.keyEvent(expected, 123, 0);
client.sendKey(123);
@@ -206,7 +206,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
});
it('should send the given text in a paste event', function () {
- var expected = {_sQ: new Uint8Array(11), _sQlen: 0};
+ var expected = {_sQ: new Uint8Array(11), _sQlen: 0, flush: function () {}};
RFB.messages.clientCutText(expected, 'abc');
client.clipboardPasteFrom('abc');
expect(client._sock).to.have.sent(expected._sQ);
@@ -571,13 +571,6 @@ describe('Remote Frame Buffer Protocol Client', function() {
expect(client._rfb_version).to.equal(3.8);
});
- it('should initialize the flush interval', function () {
- client._sock.flush = sinon.spy();
- send_ver('003.008', client);
- this.clock.tick(100);
- expect(client._sock.flush).to.have.been.calledThrice;
- });
-
it('should send back the interpreted version', function () {
send_ver('004.000', client);
@@ -1070,7 +1063,9 @@ describe('Remote Frame Buffer Protocol Client', function() {
client.set_true_color(true);
client.set_local_cursor(false);
// we skip the cursor encoding
- var expected = {_sQ: new Uint8Array(34 + 4 * (client._encodings.length - 1)), _sQlen: 0};
+ var expected = {_sQ: new Uint8Array(34 + 4 * (client._encodings.length - 1)),
+ _sQlen: 0,
+ flush: function () {}};
RFB.messages.pixelFormat(expected, 4, 3, true);
RFB.messages.clientEncodings(expected, client._encodings, false, true);
var expected_cdr = { cleanBox: { x: 0, y: 0, w: 0, h: 0 },
@@ -1161,7 +1156,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
}
it('should send an update request if there is sufficient data', function () {
- var expected_msg = {_sQ: new Uint8Array(10), _sQlen: 0};
+ var expected_msg = {_sQ: new Uint8Array(10), _sQlen: 0, flush: function() {}};
var expected_cdr = { cleanBox: { x: 0, y: 0, w: 0, h: 0 },
dirtyBoxes: [ { x: 0, y: 0, w: 240, h: 20 } ] };
RFB.messages.fbUpdateRequests(expected_msg, expected_cdr, 240, 20);
@@ -1178,7 +1173,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
});
it('should resume receiving an update if we previously did not have enough data', function () {
- var expected_msg = {_sQ: new Uint8Array(10), _sQlen: 0};
+ var expected_msg = {_sQ: new Uint8Array(10), _sQlen: 0, flush: function() {}};
var expected_cdr = { cleanBox: { x: 0, y: 0, w: 0, h: 0 },
dirtyBoxes: [ { x: 0, y: 0, w: 240, h: 20 } ] };
RFB.messages.fbUpdateRequests(expected_msg, expected_cdr, 240, 20);
@@ -1733,14 +1728,14 @@ describe('Remote Frame Buffer Protocol Client', function() {
it('should send a pointer event on mouse button presses', function () {
client._mouse._onMouseButton(10, 12, 1, 0x001);
- var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0};
+ var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0, flush: function () {}};
RFB.messages.pointerEvent(pointer_msg, 10, 12, 0x001);
expect(client._sock).to.have.sent(pointer_msg._sQ);
});
it('should send a mask of 1 on mousedown', function () {
client._mouse._onMouseButton(10, 12, 1, 0x001);
- var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0};
+ var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0, flush: function () {}};
RFB.messages.pointerEvent(pointer_msg, 10, 12, 0x001);
expect(client._sock).to.have.sent(pointer_msg._sQ);
});
@@ -1748,14 +1743,14 @@ describe('Remote Frame Buffer Protocol Client', function() {
it('should send a mask of 0 on mouseup', function () {
client._mouse_buttonMask = 0x001;
client._mouse._onMouseButton(10, 12, 0, 0x001);
- var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0};
+ var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0, flush: function () {}};
RFB.messages.pointerEvent(pointer_msg, 10, 12, 0x000);
expect(client._sock).to.have.sent(pointer_msg._sQ);
});
it('should send a pointer event on mouse movement', function () {
client._mouse._onMouseMove(10, 12);
- var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0};
+ var pointer_msg = {_sQ: new Uint8Array(6), _sQlen: 0, flush: function () {}};
RFB.messages.pointerEvent(pointer_msg, 10, 12, 0x000);
expect(client._sock).to.have.sent(pointer_msg._sQ);
});
@@ -1763,7 +1758,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
it('should set the button mask so that future mouse movements use it', function () {
client._mouse._onMouseButton(10, 12, 1, 0x010);
client._mouse._onMouseMove(13, 9);
- var pointer_msg = {_sQ: new Uint8Array(12), _sQlen: 0};
+ var pointer_msg = {_sQ: new Uint8Array(12), _sQlen: 0, flush: function () {}};
RFB.messages.pointerEvent(pointer_msg, 10, 12, 0x010);
RFB.messages.pointerEvent(pointer_msg, 13, 9, 0x010);
expect(client._sock).to.have.sent(pointer_msg._sQ);
@@ -1829,7 +1824,7 @@ describe('Remote Frame Buffer Protocol Client', function() {
it('should send a key message on a key press', function () {
client._keyboard._onKeyPress(1234, 1);
- var key_msg = {_sQ: new Uint8Array(8), _sQlen: 0};
+ var key_msg = {_sQ: new Uint8Array(8), _sQlen: 0, flush: function () {}};
RFB.messages.keyEvent(key_msg, 1234, 1);
expect(client._sock).to.have.sent(key_msg._sQ);
});