Skip heartbeat if there is no response

Fix xhr callbacks
This commit is contained in:
Paweł Jastrzębski 2021-04-23 19:15:13 +02:00 committed by R. Miles McCain
parent 073bd94112
commit 40cb5afbad

View File

@ -8,11 +8,18 @@
var Shynet = {
idempotency: null,
heartbeatTaskId: null,
skipHeartbeat: false,
sendHeartbeat: function () {
try {
if (document.hidden) {
return;
}
if (Shynet.skipHeartbeat) {
console.warn("Heartbeat skipped due to lack of server response");
return;
}
Shynet.skipHeartbeat = true;
var xhr = new XMLHttpRequest();
xhr.open(
"POST",
@ -20,6 +27,12 @@ var Shynet = {
true
);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = function () {
Shynet.skipHeartbeat = false;
};
xhr.onerror = function () {
Shynet.skipHeartbeat = false;
};
xhr.send(
JSON.stringify({
idempotency: Shynet.idempotency,
@ -30,13 +43,14 @@ var Shynet = {
window.performance.timing.navigationStart,
})
);
} catch (e) { }
} catch (e) {}
},
newPageLoad: function () {
if (Shynet.heartbeatTaskId != null) {
clearInterval(Shynet.heartbeatTaskId);
}
Shynet.idempotency = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
Shynet.skipHeartbeat = false;
Shynet.heartbeatTaskId = setInterval(Shynet.sendHeartbeat, parseInt("{{heartbeat_frequency}}"));
Shynet.sendHeartbeat();
}
@ -51,4 +65,4 @@ window.addEventListener("load", Shynet.newPageLoad);
// -- START --
{{script_inject|safe}}
// -- END --
{% endif %}
{% endif %}