mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-13 01:30:31 +08:00
client-side ping-pong
This commit is contained in:
parent
b2f57590b6
commit
2b8d6b215c
@ -150,7 +150,9 @@ class Server: # pylint: disable=too-many-instance-attributes
|
|||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't parse JSON event from websocket: %s", err)
|
logger.error("Can't parse JSON event from websocket: %s", err)
|
||||||
else:
|
else:
|
||||||
if event.get("event_type") == "key":
|
if event.get("event_type") == "ping":
|
||||||
|
ws.send_str(json.dumps({"msg_type": "pong"}))
|
||||||
|
elif event.get("event_type") == "key":
|
||||||
key = str(event.get("key", ""))[:64].strip()
|
key = str(event.get("key", ""))[:64].strip()
|
||||||
state = event.get("state")
|
state = event.get("state")
|
||||||
if key and state in [True, False]:
|
if key and state in [True, False]:
|
||||||
|
|||||||
@ -11,13 +11,16 @@ function __startSessionPoller() {
|
|||||||
ws.onopen = function(event) {
|
ws.onopen = function(event) {
|
||||||
__installHidHandlers(ws);
|
__installHidHandlers(ws);
|
||||||
__setSessionStatus(true);
|
__setSessionStatus(true);
|
||||||
|
__startSessionPoller.ping_server_timer = setInterval(() => __pingServer(ws), 2000);
|
||||||
};
|
};
|
||||||
|
|
||||||
ws.onmessage = function(event) {
|
ws.onmessage = function(event) {
|
||||||
// console.log("KVMD:", event.data);
|
// console.log("KVMD:", event.data);
|
||||||
event = JSON.parse(event.data);
|
event = JSON.parse(event.data);
|
||||||
if (event.msg_type == "event") {
|
if (event.msg_type == "event") {
|
||||||
if (event.msg.event == "atx_state") {
|
if (event.msg.event == "pong") {
|
||||||
|
__pingServer.missed_heartbeats = 0;
|
||||||
|
} else if (event.msg.event == "atx_state") {
|
||||||
leds = event.msg.event_attrs.leds;
|
leds = event.msg.event_attrs.leds;
|
||||||
document.getElementById("atx-power-led").className = (leds.power ? "led-on" : "led-off");
|
document.getElementById("atx-power-led").className = (leds.power ? "led-on" : "led-off");
|
||||||
document.getElementById("atx-hdd-led").className = (leds.hdd ? "led-busy" : "led-off");
|
document.getElementById("atx-hdd-led").className = (leds.hdd ? "led-busy" : "led-off");
|
||||||
@ -26,6 +29,9 @@ function __startSessionPoller() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ws.onclose = function(event) {
|
ws.onclose = function(event) {
|
||||||
|
if (__startSessionPoller.ping_server_timer) {
|
||||||
|
clearInterval(__startSessionPoller.ping_server_timer);
|
||||||
|
}
|
||||||
__clearHidHandlers();
|
__clearHidHandlers();
|
||||||
__setSessionStatus(false);
|
__setSessionStatus(false);
|
||||||
document.getElementById("atx-power-led").className = "led-off";
|
document.getElementById("atx-power-led").className = "led-off";
|
||||||
@ -38,6 +44,21 @@ function __startSessionPoller() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function __pingServer(ws) {
|
||||||
|
try {
|
||||||
|
__pingServer.missed_heartbeats++;
|
||||||
|
if (__pingServer.missed_heartbeats >= 5) {
|
||||||
|
throw new Error("Too many missed heartbeats");
|
||||||
|
}
|
||||||
|
ws.send(JSON.stringify({"event_type": "ping"}));
|
||||||
|
} catch (err) {
|
||||||
|
__pingServer.missed_heartbeats = 0;
|
||||||
|
console.warn("Closing session:", err.message);
|
||||||
|
ws.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__pingServer.missed_heartbeats = 0;
|
||||||
|
|
||||||
function __setSessionStatus(status) {
|
function __setSessionStatus(status) {
|
||||||
var el_session_status = document.getElementById("session-status");
|
var el_session_status = document.getElementById("session-status");
|
||||||
el_session_status.innerHTML = (status ? "Session active" : "Session closed, trying to reconnect...");
|
el_session_status.innerHTML = (status ? "Session active" : "Session closed, trying to reconnect...");
|
||||||
@ -74,7 +95,9 @@ function __installHidHandlers(ws) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function __clearHidHandlers() {
|
function __clearHidHandlers() {
|
||||||
|
if (__installHidHandlers.mouse_move_timer) {
|
||||||
clearInterval(__installHidHandlers.mouse_move_timer);
|
clearInterval(__installHidHandlers.mouse_move_timer);
|
||||||
|
}
|
||||||
|
|
||||||
document.onkeydown = null;
|
document.onkeydown = null;
|
||||||
document.onkeyup = null;
|
document.onkeyup = null;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user