Slight websocket reconnection tweaks
This commit is contained in:
parent
7f92607b85
commit
efbb7a034c
@ -215,7 +215,7 @@ function onLoad() {
|
|||||||
//TODO: do some parsing first
|
//TODO: do some parsing first
|
||||||
})
|
})
|
||||||
.catch(function (error) {
|
.catch(function (error) {
|
||||||
console.log("holidays.json does not contain array of holidays. Defaults loaded.");
|
console.log("No array of holidays in holidays.json. Defaults loaded.");
|
||||||
})
|
})
|
||||||
.finally(function(){
|
.finally(function(){
|
||||||
loadBg(cfg.theme.bg.url);
|
loadBg(cfg.theme.bg.url);
|
||||||
@ -280,12 +280,8 @@ function showToast(text, error = false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function showErrorToast() {
|
function showErrorToast() {
|
||||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
// if we received a timeout force WS reconnect
|
||||||
// if we received a timeout force WS reconnect
|
reconnectWS();
|
||||||
ws.close();
|
|
||||||
ws = null;
|
|
||||||
if (lastinfo.ws > -1) setTimeout(makeWS,500);
|
|
||||||
}
|
|
||||||
showToast('Connection to light failed!', true);
|
showToast('Connection to light failed!', true);
|
||||||
}
|
}
|
||||||
function clearErrorToast() {
|
function clearErrorToast() {
|
||||||
@ -959,6 +955,13 @@ function cmpP(a, b) {
|
|||||||
return a[1].n.localeCompare(b[1].n,undefined, {numeric: true});
|
return a[1].n.localeCompare(b[1].n,undefined, {numeric: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//forces a WebSockets reconnect if timeout (error toast), or successful HTTP response to JSON request
|
||||||
|
function reconnectWS() {
|
||||||
|
if (ws) ws.close();
|
||||||
|
ws = null;
|
||||||
|
if (lastinfo && lastinfo.ws > -1) setTimeout(makeWS,500);
|
||||||
|
}
|
||||||
|
|
||||||
function makeWS() {
|
function makeWS() {
|
||||||
if (ws) return;
|
if (ws) return;
|
||||||
ws = new WebSocket('ws://'+(loc?locip:window.location.hostname)+'/ws');
|
ws = new WebSocket('ws://'+(loc?locip:window.location.hostname)+'/ws');
|
||||||
@ -981,12 +984,13 @@ function makeWS() {
|
|||||||
readState(json.state);
|
readState(json.state);
|
||||||
};
|
};
|
||||||
ws.onclose = (e)=>{
|
ws.onclose = (e)=>{
|
||||||
|
//if there is already a new web socket open, do not null ws
|
||||||
|
if (ws && ws.readyState === WebSocket.OPEN) return;
|
||||||
|
|
||||||
d.getElementById('connind').style.backgroundColor = "#831";
|
d.getElementById('connind').style.backgroundColor = "#831";
|
||||||
ws = null;
|
ws = null;
|
||||||
if (lastinfo.ws > -1) setTimeout(makeWS,500); //retry WS connection
|
|
||||||
}
|
}
|
||||||
ws.onopen = (e)=>{
|
ws.onopen = (e)=>{
|
||||||
ws.send("{'v':true}");
|
|
||||||
reqsLegal = true;
|
reqsLegal = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1140,6 +1144,7 @@ function requestJson(command, rinfo = true) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var s = json;
|
var s = json;
|
||||||
|
if (reqsLegal && !ws) reconnectWS();
|
||||||
|
|
||||||
if (!command || rinfo) { //we have info object
|
if (!command || rinfo) { //we have info object
|
||||||
if (!rinfo) { //entire JSON (on load)
|
if (!rinfo) { //entire JSON (on load)
|
||||||
@ -1155,7 +1160,7 @@ function requestJson(command, rinfo = true) {
|
|||||||
});
|
});
|
||||||
},25);
|
},25);
|
||||||
|
|
||||||
reqsLegal = true;
|
reqsLegal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var info = json.info;
|
var info = json.info;
|
||||||
@ -1188,7 +1193,7 @@ function requestJson(command, rinfo = true) {
|
|||||||
displayRover(info, s);
|
displayRover(info, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
readState(s,command);
|
readState(s,command);
|
||||||
})
|
})
|
||||||
.catch(function (error) {
|
.catch(function (error) {
|
||||||
showToast(error, true);
|
showToast(error, true);
|
||||||
@ -1464,8 +1469,8 @@ function makePlEntry(p,i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function makePlUtil() {
|
function makePlUtil() {
|
||||||
if (pNum < 2) {
|
if (pNum < 1) {
|
||||||
showToast("You need at least 2 presets to make a playlist!"); return;
|
showToast("Please make a preset first!"); return;
|
||||||
}
|
}
|
||||||
if (plJson[0].transition[0] < 0) plJson[0].transition[0] = tr;
|
if (plJson[0].transition[0] < 0) plJson[0].transition[0] = tr;
|
||||||
d.getElementById('putil').innerHTML = `<div class="seg pres">
|
d.getElementById('putil').innerHTML = `<div class="seg pres">
|
||||||
|
1611
wled00/html_ui.h
1611
wled00/html_ui.h
File diff suppressed because it is too large
Load Diff
@ -113,7 +113,8 @@ void sendDataWs(AsyncWebSocketClient * client)
|
|||||||
size_t heap2 = ESP.getFreeHeap();
|
size_t heap2 = ESP.getFreeHeap();
|
||||||
if (!buffer || heap1-heap2<len) {
|
if (!buffer || heap1-heap2<len) {
|
||||||
releaseJSONBufferLock();
|
releaseJSONBufferLock();
|
||||||
ws.cleanupClients(0); // disconnect all clients to release memory
|
ws.closeAll(1013); //code 1013 = temporary overload, try again later
|
||||||
|
ws.cleanupClients(0); //disconnect all clients to release memory
|
||||||
return; //out of memory
|
return; //out of memory
|
||||||
}
|
}
|
||||||
serializeJson(doc, (char *)buffer->get(), len +1);
|
serializeJson(doc, (char *)buffer->get(), len +1);
|
||||||
@ -159,7 +160,7 @@ void handleWs()
|
|||||||
if (millis() - wsLastLiveTime > WS_LIVE_INTERVAL)
|
if (millis() - wsLastLiveTime > WS_LIVE_INTERVAL)
|
||||||
{
|
{
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
ws.cleanupClients(2);
|
ws.cleanupClients(3);
|
||||||
#else
|
#else
|
||||||
ws.cleanupClients();
|
ws.cleanupClients();
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user