Skip to content

Commit

Permalink
Merge pull request #112 from sunu/retry-initial-connection
Browse files Browse the repository at this point in the history
Retry a few times when the initial connection fails
  • Loading branch information
yuvipanda authored Jun 12, 2024
2 parents d41bca2 + 975d084 commit bec995c
Showing 1 changed file with 48 additions and 29 deletions.
77 changes: 48 additions & 29 deletions js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import RFB from "@novnc/novnc/core/rfb";

import { setupTooltip } from "./tooltip.js";

const maxRetryCount = 5;
const retryInterval = 3; // seconds

// When this function is called we have successfully connected to a server
function connectedToServer() {
status("Connected");
Expand All @@ -22,6 +25,15 @@ function disconnectedFromServer(e) {
status("Disconnected");
} else {
status("Something went wrong, connection is closed");
if (retryCount < maxRetryCount) {
status(`Reconnecting in ${retryInterval} seconds`);
setTimeout(() => {
connect();
retryCount++;
}, retryInterval * 1000);
} else {
status("Failed to connect, giving up");
}
}
}

Expand All @@ -36,38 +48,45 @@ function status(text) {
let websockifyUrl = new URL("../desktop-websockify/", window.location);
websockifyUrl.protocol = window.location.protocol === "https:" ? "wss" : "ws";

// Creating a new RFB object will start a new connection
const rfb = new RFB(
document.getElementById("screen"),
websockifyUrl.toString(),
{},
);
let retryCount = 0;

// Add listeners to important events from the RFB module
rfb.addEventListener("connect", connectedToServer);
rfb.addEventListener("disconnect", disconnectedFromServer);
function connect() {
// Creating a new RFB object will start a new connection
let rfb = new RFB(
document.getElementById("screen"),
websockifyUrl.toString(),
{},
);

// Scale our viewport so the user doesn't have to scroll
rfb.scaleViewport = true;
// Add listeners to important events from the RFB module
rfb.addEventListener("connect", connectedToServer);
rfb.addEventListener("disconnect", disconnectedFromServer);

// Use a CSS variable to set background color
rfb.background = "var(--jupyter-medium-dark-grey)";
// Scale our viewport so the user doesn't have to scroll
rfb.scaleViewport = true;

// Clipboard
function clipboardReceive(e) {
document.getElementById("clipboard-text").value = e.detail.text;
}
rfb.addEventListener("clipboard", clipboardReceive);
// Use a CSS variable to set background color
rfb.background = "var(--jupyter-medium-dark-grey)";

// Clipboard
function clipboardReceive(e) {
document.getElementById("clipboard-text").value = e.detail.text;
}
rfb.addEventListener("clipboard", clipboardReceive);

function clipboardSend() {
const text = document.getElementById("clipboard-text").value;
rfb.clipboardPasteFrom(text);
function clipboardSend() {
const text = document.getElementById("clipboard-text").value;
rfb.clipboardPasteFrom(text);
}
document
.getElementById("clipboard-text")
.addEventListener("change", clipboardSend);

setupTooltip(
document.getElementById("clipboard-button"),
document.getElementById("clipboard-container"),
);
}
document
.getElementById("clipboard-text")
.addEventListener("change", clipboardSend);

setupTooltip(
document.getElementById("clipboard-button"),
document.getElementById("clipboard-container"),
);

// Start the connection
connect();

0 comments on commit bec995c

Please sign in to comment.