var STATE_DISCONNECTED = 5;
var currentState = STATE_IDLE;
+
+ var currentTimestamp = 0;
+ var pingInterval = null;
tunnel.onerror = function(message) {
if (guac_client.onerror)
layersToSync--;
// Send sync response when layers are finished
- if (layersToSync == 0)
+ if (layersToSync == 0) {
tunnel.sendMessage("sync", timestamp);
+ currentTimestamp = timestamp;
+ }
}
// If all layers are ready, then we didn't install any hooks.
// Send sync message now,
- if (layersToSync == 0)
+ if (layersToSync == 0) {
tunnel.sendMessage("sync", timestamp);
+ currentTimestamp = timestamp;
+ }
}
&& currentState != STATE_DISCONNECTING) {
setState(STATE_DISCONNECTING);
+
+ // Stop ping
+ if (pingInterval)
+ window.clearInterval(pingInterval);
+
+ // Send disconnect message and disconnect
tunnel.sendMessage("disconnect");
tunnel.disconnect();
setState(STATE_DISCONNECTED);
+
}
};
throw e;
}
+ // Ping every 5 seconds (ensure connection alive)
+ pingInterval = window.setInterval(function() {
+ tunnel.sendMessage("sync", currentTimestamp);
+ }, 5000);
+
setState(STATE_WAITING);
};