Enhance WebSocket handling and log polling logic
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-02-11 16:25:48 +11:00
parent ffd43d5217
commit e48a061ca0
6 changed files with 126 additions and 39 deletions

View File

@@ -997,10 +997,43 @@ function initShellLayout() {
setConnectionState("idle"); setConnectionState("idle");
SHELL_LAYOUT_READY = true; SHELL_LAYOUT_READY = true;
} }
function shouldPollLogs() {
if (document.hidden == true) {
return false;
}
if (document.getElementById("content_log") == null) {
return false;
}
if (ACTIVE_MENU_ID.length < 1) {
return false;
}
var activeItem = document.getElementById(ACTIVE_MENU_ID);
if (activeItem == null) {
return false;
}
return activeItem.getAttribute("data-menu") == "log";
}
function PageReady() { function PageReady() {
initShellLayout(); initShellLayout();
var server = new Server("getServerConfig"); var server = new Server("getServerConfig");
server.request(new Object()); server.request(new Object());
var bootstrapAttempts = 0;
var maxBootstrapAttempts = 5;
var bootstrapTimer = window.setInterval(function () {
if (SERVER.hasOwnProperty("clientInfo") == true) {
window.clearInterval(bootstrapTimer);
return;
}
if (SERVER_CONNECTION == true) {
return;
}
bootstrapAttempts++;
var retryServer = new Server("getServerConfig");
retryServer.request(new Object());
if (bootstrapAttempts >= maxBootstrapAttempts) {
window.clearInterval(bootstrapTimer);
}
}, 3000);
window.addEventListener("resize", function () { window.addEventListener("resize", function () {
if (window.innerWidth > 900) { if (window.innerWidth > 900) {
setLayoutMenuState(false); setLayoutMenuState(false);
@@ -1008,7 +1041,7 @@ function PageReady() {
calculateWrapperHeight(); calculateWrapperHeight();
}, true); }, true);
setInterval(function () { setInterval(function () {
if (document.hidden == true) { if (shouldPollLogs() == false) {
return; return;
} }
updateLog(); updateLog();

View File

@@ -27,6 +27,7 @@ var Server = /** @class */ (function () {
} }
var url = this.protocol + wsHost + "/data/" + "?Token=" + getCookie("Token"); var url = this.protocol + wsHost + "/data/" + "?Token=" + getCookie("Token");
data["cmd"] = this.cmd; data["cmd"] = this.cmd;
var requestCmd = data["cmd"];
var ws = new WebSocket(url); var ws = new WebSocket(url);
var isLogUpdate = data["cmd"] == "updateLog"; var isLogUpdate = data["cmd"] == "updateLog";
var responseReceived = false; var responseReceived = false;
@@ -88,7 +89,7 @@ var Server = /** @class */ (function () {
errorState = "idle"; errorState = "idle";
} }
finishRequest(errorState, false); finishRequest(errorState, false);
if (WS_AVAILABLE == false && isLogUpdate == false) { if (WS_AVAILABLE == false && isLogUpdate == false && requestCmd != "getServerConfig") {
alert("No websocket connection to xTeVe could be established. Check your network configuration."); alert("No websocket connection to xTeVe could be established. Check your network configuration.");
} }
}; };

File diff suppressed because one or more lines are too long

View File

@@ -15,6 +15,14 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
) )
var wsUpgrader = websocket.Upgrader{
ReadBufferSize: 4096,
WriteBufferSize: 4096,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
// StartWebserver : Startet den Webserver // StartWebserver : Startet den Webserver
func StartWebserver() (err error) { func StartWebserver() (err error) {
@@ -336,7 +344,7 @@ func WS(w http.ResponseWriter, r *http.Request) {
} }
*/ */
conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024) conn, err := wsUpgrader.Upgrade(w, r, nil)
if err != nil { if err != nil {
ShowError(err, 0) ShowError(err, 0)
http.Error(w, "Could not open websocket connection", http.StatusBadRequest) http.Error(w, "Could not open websocket connection", http.StatusBadRequest)

View File

@@ -987,6 +987,27 @@ function initShellLayout() {
SHELL_LAYOUT_READY = true SHELL_LAYOUT_READY = true
} }
function shouldPollLogs():boolean {
if (document.hidden == true) {
return false
}
if (document.getElementById("content_log") == null) {
return false
}
if (ACTIVE_MENU_ID.length < 1) {
return false
}
var activeItem = document.getElementById(ACTIVE_MENU_ID)
if (activeItem == null) {
return false
}
return activeItem.getAttribute("data-menu") == "log"
}
function PageReady() { function PageReady() {
initShellLayout() initShellLayout()
@@ -994,6 +1015,29 @@ function PageReady() {
var server:Server = new Server("getServerConfig") var server:Server = new Server("getServerConfig")
server.request(new Object()) server.request(new Object())
var bootstrapAttempts:number = 0
var maxBootstrapAttempts:number = 5
var bootstrapTimer:number = window.setInterval(function() {
if (SERVER.hasOwnProperty("clientInfo") == true) {
window.clearInterval(bootstrapTimer)
return
}
if (SERVER_CONNECTION == true) {
return
}
bootstrapAttempts++
var retryServer:Server = new Server("getServerConfig")
retryServer.request(new Object())
if (bootstrapAttempts >= maxBootstrapAttempts) {
window.clearInterval(bootstrapTimer)
}
}, 3000)
window.addEventListener("resize", function(){ window.addEventListener("resize", function(){
if (window.innerWidth > 900) { if (window.innerWidth > 900) {
setLayoutMenuState(false) setLayoutMenuState(false)
@@ -1002,7 +1046,7 @@ function PageReady() {
}, true); }, true);
setInterval(function(){ setInterval(function(){
if (document.hidden == true) { if (shouldPollLogs() == false) {
return return
} }
updateLog() updateLog()

View File

@@ -37,6 +37,7 @@ class Server {
var url = this.protocol + wsHost + "/data/" + "?Token=" + getCookie("Token") var url = this.protocol + wsHost + "/data/" + "?Token=" + getCookie("Token")
data["cmd"] = this.cmd data["cmd"] = this.cmd
var requestCmd:string = data["cmd"]
var ws = new WebSocket(url) var ws = new WebSocket(url)
var isLogUpdate:boolean = data["cmd"] == "updateLog" var isLogUpdate:boolean = data["cmd"] == "updateLog"
var responseReceived:boolean = false var responseReceived:boolean = false
@@ -110,7 +111,7 @@ class Server {
} }
finishRequest(errorState, false) finishRequest(errorState, false)
if (WS_AVAILABLE == false && isLogUpdate == false) { if (WS_AVAILABLE == false && isLogUpdate == false && requestCmd != "getServerConfig") {
alert("No websocket connection to xTeVe could be established. Check your network configuration.") alert("No websocket connection to xTeVe could be established. Check your network configuration.")
} }