Переглянути джерело

Merge pull request #458 from kanaka/bug/disconnect

Fix disconnect/reconnect issues
Samuel 10 роки тому
батько
коміт
4043d8bb12
2 змінених файлів з 26 додано та 10 видалено
  1. 1 0
      include/rfb.js
  2. 25 10
      include/ui.js

+ 1 - 0
include/rfb.js

@@ -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) {

+ 25 - 10
include/ui.js

@@ -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'),
-                              'onUpdateState': UI.updateState,
-                              'onXvpInit': UI.updateXvpVisualState,
-                              'onClipboard': UI.clipReceive,
-                              'onFBUComplete': UI.FBUComplete,
-                              'onFBResize': UI.updateViewDragButton,
-                              'onDesktopName': UI.updateDocumentTitle});
+            UI.initRFB();
 
 
             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;
             }
             }
         },
         },
 
 
+        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;
                     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;
             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;
             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;
-            UI.toggleConnectPanel();
+            // Don't display the connection settings until we're actually disconnected
         },
         },
 
 
         displayBlur: function() {
         displayBlur: function() {