Make noVNC follow the RFB protocol and keep only one outstanding
framebufferUpdate request at a time.
This commit is contained in:
parent
0e3d505e54
commit
dfcedffc16
|
@ -103,7 +103,6 @@ var that = {}, // Public API methods
|
||||||
fb_height = 0,
|
fb_height = 0,
|
||||||
fb_name = "",
|
fb_name = "",
|
||||||
|
|
||||||
last_req_time = 0,
|
|
||||||
rre_chunk_sz = 100,
|
rre_chunk_sz = 100,
|
||||||
|
|
||||||
timing = {
|
timing = {
|
||||||
|
@ -148,9 +147,6 @@ Util.conf_defaults(conf, that, defaults, [
|
||||||
|
|
||||||
['viewportDrag', 'rw', 'bool', false, 'Move the viewport on mouse drags'],
|
['viewportDrag', 'rw', 'bool', false, 'Move the viewport on mouse drags'],
|
||||||
|
|
||||||
['check_rate', 'rw', 'int', 217, 'Timing (ms) of send/receive check'],
|
|
||||||
['fbu_req_rate', 'rw', 'int', 1413, 'Timing (ms) of frameBufferUpdate requests'],
|
|
||||||
|
|
||||||
// Callback functions
|
// Callback functions
|
||||||
['onUpdateState', 'rw', 'func', function() { },
|
['onUpdateState', 'rw', 'func', function() { },
|
||||||
'onUpdateState(rfb, state, oldstate, statusMsg): RFB state update/change '],
|
'onUpdateState(rfb, state, oldstate, statusMsg): RFB state update/change '],
|
||||||
|
@ -569,44 +565,18 @@ function genDES(password, challenge) {
|
||||||
return (new DES(passwd)).encrypt(challenge);
|
return (new DES(passwd)).encrypt(challenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
function flushClient() {
|
|
||||||
if (mouse_arr.length > 0) {
|
|
||||||
//send(mouse_arr.concat(fbUpdateRequests()));
|
|
||||||
ws.send(mouse_arr);
|
|
||||||
setTimeout(function() {
|
|
||||||
ws.send(fbUpdateRequests());
|
|
||||||
}, 50);
|
|
||||||
|
|
||||||
mouse_arr = [];
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// overridable for testing
|
// overridable for testing
|
||||||
checkEvents = function() {
|
checkEvents = function() {
|
||||||
var now;
|
if (rfb_state === 'normal' && !viewportDragging && mouse_arr.length > 0) {
|
||||||
if (rfb_state === 'normal' && !viewportDragging) {
|
ws.send(mouse_arr);
|
||||||
if (! flushClient()) {
|
mouse_arr = [];
|
||||||
now = new Date().getTime();
|
|
||||||
if (now > last_req_time + conf.fbu_req_rate) {
|
|
||||||
last_req_time = now;
|
|
||||||
ws.send(fbUpdateRequests());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setTimeout(checkEvents, conf.check_rate);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
keyPress = function(keysym, down) {
|
keyPress = function(keysym, down) {
|
||||||
var arr;
|
|
||||||
|
|
||||||
if (conf.view_only) { return; } // View only, skip keyboard events
|
if (conf.view_only) { return; } // View only, skip keyboard events
|
||||||
|
|
||||||
arr = keyEvent(keysym, down);
|
ws.send(keyEvent(keysym, down));
|
||||||
arr = arr.concat(fbUpdateRequests());
|
|
||||||
ws.send(arr);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mouseButton = function(x, y, down, bmask) {
|
mouseButton = function(x, y, down, bmask) {
|
||||||
|
@ -633,7 +603,8 @@ mouseButton = function(x, y, down, bmask) {
|
||||||
|
|
||||||
mouse_arr = mouse_arr.concat(
|
mouse_arr = mouse_arr.concat(
|
||||||
pointerEvent(display.absX(x), display.absY(y)) );
|
pointerEvent(display.absX(x), display.absY(y)) );
|
||||||
flushClient();
|
ws.send(mouse_arr);
|
||||||
|
mouse_arr = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
mouseMove = function(x, y) {
|
mouseMove = function(x, y) {
|
||||||
|
@ -656,7 +627,9 @@ mouseMove = function(x, y) {
|
||||||
if (conf.view_only) { return; } // View only, skip mouse events
|
if (conf.view_only) { return; } // View only, skip mouse events
|
||||||
|
|
||||||
mouse_arr = mouse_arr.concat(
|
mouse_arr = mouse_arr.concat(
|
||||||
pointerEvent(display.absX(x), display.absY(y)) );
|
pointerEvent(display.absX(x), display.absY(y)));
|
||||||
|
|
||||||
|
checkEvents();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -905,8 +878,7 @@ init_msg = function() {
|
||||||
timing.pixels = 0;
|
timing.pixels = 0;
|
||||||
ws.send(response);
|
ws.send(response);
|
||||||
|
|
||||||
/* Start pushing/polling */
|
checkEvents();
|
||||||
setTimeout(checkEvents, conf.check_rate);
|
|
||||||
|
|
||||||
if (conf.encrypt) {
|
if (conf.encrypt) {
|
||||||
updateState('normal', "Connected (encrypted) to: " + fb_name);
|
updateState('normal', "Connected (encrypted) to: " + fb_name);
|
||||||
|
@ -934,6 +906,9 @@ normal_msg = function() {
|
||||||
switch (msg_type) {
|
switch (msg_type) {
|
||||||
case 0: // FramebufferUpdate
|
case 0: // FramebufferUpdate
|
||||||
ret = framebufferUpdate(); // false means need more data
|
ret = framebufferUpdate(); // false means need more data
|
||||||
|
if (ret) {
|
||||||
|
ws.send(fbUpdateRequests());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 1: // SetColourMapEntries
|
case 1: // SetColourMapEntries
|
||||||
Util.Debug("SetColourMapEntries");
|
Util.Debug("SetColourMapEntries");
|
||||||
|
|
Loading…
Reference in New Issue