Commit e543525f authored by Solly Ross's avatar Solly Ross

Fix disconnect/reconnect issues

Commit 155d78b3 prevented reconnections
from working properly.  This fixes that by creating a new RFB object
after disconnecting or failing.

Furthermore, this ensures that a new connection cannot be opened util
we've actually disconnected (either by timer or by receiving a `close`
event).

Closes #452
parent fe8a4dc9
...@@ -482,6 +482,7 @@ var RFB; ...@@ -482,6 +482,7 @@ var RFB;
Util.Debug("Clearing disconnect timer"); Util.Debug("Clearing disconnect timer");
clearTimeout(this._disconnTimer); clearTimeout(this._disconnTimer);
this._disconnTimer = null; this._disconnTimer = null;
this._sock.off('close'); // make sure we don't get a double event
} }
switch (state) { switch (state) {
......
...@@ -110,13 +110,7 @@ var UI; ...@@ -110,13 +110,7 @@ var UI;
UI.initSetting('path', 'websockify'); UI.initSetting('path', 'websockify');
UI.initSetting('repeaterID', ''); UI.initSetting('repeaterID', '');
UI.rfb = new RFB({'target': $D('noVNC_canvas'), UI.initRFB();
'onUpdateState': UI.updateState,
'onXvpInit': UI.updateXvpVisualState,
'onClipboard': UI.clipReceive,
'onFBUComplete': UI.FBUComplete,
'onFBResize': UI.updateViewDragButton,
'onDesktopName': UI.updateDocumentTitle});
var autoconnect = WebUtil.getQueryVar('autoconnect', false); var autoconnect = WebUtil.getQueryVar('autoconnect', false);
if (autoconnect === 'true' || autoconnect == '1') { if (autoconnect === 'true' || autoconnect == '1') {
...@@ -192,6 +186,16 @@ var UI; ...@@ -192,6 +186,16 @@ var UI;
} }
}, },
initRFB: function () {
UI.rfb = new RFB({'target': $D('noVNC_canvas'),
'onUpdateState': UI.updateState,
'onXvpInit': UI.updateXvpVisualState,
'onClipboard': UI.clipReceive,
'onFBUComplete': UI.FBUComplete,
'onFBResize': UI.updateViewDragButton,
'onDesktopName': UI.updateDocumentTitle});
},
addMouseHandlers: function() { addMouseHandlers: function() {
// Setup interface handlers that can't be inline // Setup interface handlers that can't be inline
$D("noVNC_view_drag_button").onclick = UI.setViewDrag; $D("noVNC_view_drag_button").onclick = UI.setViewDrag;
...@@ -602,6 +606,13 @@ var UI; ...@@ -602,6 +606,13 @@ var UI;
break; break;
} }
switch (state) {
case 'fatal':
case 'failed':
case 'disconnected':
UI.initRFB();
}
if (typeof(msg) !== 'undefined') { if (typeof(msg) !== 'undefined') {
$D('noVNC-control-bar').setAttribute("class", klass); $D('noVNC-control-bar').setAttribute("class", klass);
$D('noVNC_status').innerHTML = msg; $D('noVNC_status').innerHTML = msg;
...@@ -654,8 +665,13 @@ var UI; ...@@ -654,8 +665,13 @@ var UI;
switch (UI.rfb_state) { switch (UI.rfb_state) {
case 'fatal': case 'fatal':
case 'failed': case 'failed':
case 'loaded':
case 'disconnected': case 'disconnected':
$D('connectButton').style.display = "";
$D('disconnectButton').style.display = "none";
UI.connSettingsOpen = false;
UI.toggleConnectPanel();
break;
case 'loaded':
$D('connectButton').style.display = ""; $D('connectButton').style.display = "";
$D('disconnectButton').style.display = "none"; $D('disconnectButton').style.display = "none";
break; break;
...@@ -736,8 +752,7 @@ var UI; ...@@ -736,8 +752,7 @@ var UI;
UI.rfb.set_onFBUComplete(UI.FBUComplete); UI.rfb.set_onFBUComplete(UI.FBUComplete);
$D('noVNC_logo').style.display = "block"; $D('noVNC_logo').style.display = "block";
UI.connSettingsOpen = false; // Don't display the connection settings until we're actually disconnected
UI.toggleConnectPanel();
}, },
displayBlur: function() { displayBlur: function() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment