add rudimentary reconnect

Signed-off-by: Christian Richter <crichter@owncloud.com>
This commit is contained in:
Christian Richter
2022-07-17 12:06:47 +02:00
parent 55ffcf75d3
commit d6204d9a62
3 changed files with 40 additions and 1 deletions

View File

@@ -50,6 +50,8 @@
</body> </body>
<script> <script>
var playlist = []; var playlist = [];
var socketConnector = null;
var socketSemaphore = false;
var tag = document.createElement("script"); var tag = document.createElement("script");
tag.src = "https://www.youtube.com/iframe_api"; tag.src = "https://www.youtube.com/iframe_api";
@@ -93,12 +95,38 @@
} }
function connectSocket() { function connectSocket() {
if (socketSemaphore) {
console.log("Another connection attempt already in progress, canceling!");
return;
}
console.log("Connecting to socket");
socketSemaphore = true;
baseUrl = window.location.host.replace("8080", "8090"); baseUrl = window.location.host.replace("8080", "8090");
let socket = new WebSocket("ws://" + baseUrl); let socket = new WebSocket("ws://" + baseUrl);
socket.onopen = function (e) { socket.onopen = function (e) {
clearInterval(socketConnector);
socketConnector = null;
socketSemaphore = false;
console.log("[open] Connection established"); console.log("[open] Connection established");
}; };
// TODO: on close and on error attempt reconnect // TODO: on close and on error attempt reconnect
socket.onclose = function (event) {
if (event.wasClean) {
console.log(
`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`
);
} else {
// e.g. server process killed or network down
// event.code is usually 1006 in this case
// TODO: add some nice ui thingi to show reconnect
// TODO: also add some timeout function to repeat this until connect is successful, let it interact with 'onopen'
console.log("[close] Connection died, attempting reconnect");
if (!socketConnector) {
socketConnector = setInterval(connectSocket, 5000);
socketSemaphore = false;
}
}
};
socket.onmessage = function (event) { socket.onmessage = function (event) {
data = JSON.parse(event.data); data = JSON.parse(event.data);
if (data["videoId"] != undefined && data["videoId"] != null) { if (data["videoId"] != undefined && data["videoId"] != null) {
@@ -113,6 +141,7 @@
); );
} }
}; };
socketSemaphore = false;
} }
function updatePlaylist() { function updatePlaylist() {
@@ -124,5 +153,12 @@
}); });
pl.innerHTML = output; pl.innerHTML = output;
} }
//function myDebugger() {
// console.log(socketSemaphore);
// console.log(socketConnector);
// console.log("=================");
//}
//myDebugger = setInterval(myDebugger, 2000);
</script> </script>
</html> </html>

View File

@@ -2,6 +2,7 @@
"homeServerUrl": "https://matrix.your-homeserver.org", "homeServerUrl": "https://matrix.your-homeserver.org",
"accessToken": "youraccesstokencanbeobtainedthroughriot", "accessToken": "youraccesstokencanbeobtainedthroughriot",
"storage": "config/bot.json", "storage": "config/bot.json",
"assetDir": "assets/",
"webServerPort": "8080", "webServerPort": "8080",
"webSocketServerPort":"8090", "webSocketServerPort":"8090",
"monitorChannels": [ "monitorChannels": [

View File

@@ -21,11 +21,13 @@ const client = new MatrixClient(
); );
// load assets // load assets
console.log("Reading assets...")
let assets = []; let assets = [];
var files = fs.readdirSync("assets/"); var files = fs.readdirSync(config.assetDir);
files.forEach((name) => { files.forEach((name) => {
assets[name] = fs.readFileSync("assets/" + name); assets[name] = fs.readFileSync("assets/" + name);
}); });
console.log("[DONE]")
// create server, this is for delivering the iframe page // create server, this is for delivering the iframe page
const webServer = http const webServer = http
.createServer((req, res) => { .createServer((req, res) => {