Enhance WebSocket handling and log polling logic
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
68
src/webUI.go
68
src/webUI.go
File diff suppressed because one or more lines are too long
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user