mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 17:20:30 +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:
|
||||
logger.error("Can't parse JSON event from websocket: %s", err)
|
||||
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()
|
||||
state = event.get("state")
|
||||
if key and state in [True, False]:
|
||||
|
||||
@ -11,13 +11,16 @@ function __startSessionPoller() {
|
||||
ws.onopen = function(event) {
|
||||
__installHidHandlers(ws);
|
||||
__setSessionStatus(true);
|
||||
__startSessionPoller.ping_server_timer = setInterval(() => __pingServer(ws), 2000);
|
||||
};
|
||||
|
||||
ws.onmessage = function(event) {
|
||||
// console.log("KVMD:", event.data);
|
||||
event = JSON.parse(event.data);
|
||||
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;
|
||||
document.getElementById("atx-power-led").className = (leds.power ? "led-on" : "led-off");
|
||||
document.getElementById("atx-hdd-led").className = (leds.hdd ? "led-busy" : "led-off");
|
||||
@ -26,6 +29,9 @@ function __startSessionPoller() {
|
||||
};
|
||||
|
||||
ws.onclose = function(event) {
|
||||
if (__startSessionPoller.ping_server_timer) {
|
||||
clearInterval(__startSessionPoller.ping_server_timer);
|
||||
}
|
||||
__clearHidHandlers();
|
||||
__setSessionStatus(false);
|
||||
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) {
|
||||
var el_session_status = document.getElementById("session-status");
|
||||
el_session_status.innerHTML = (status ? "Session active" : "Session closed, trying to reconnect...");
|
||||
@ -74,7 +95,9 @@ function __installHidHandlers(ws) {
|
||||
}
|
||||
|
||||
function __clearHidHandlers() {
|
||||
if (__installHidHandlers.mouse_move_timer) {
|
||||
clearInterval(__installHidHandlers.mouse_move_timer);
|
||||
}
|
||||
|
||||
document.onkeydown = null;
|
||||
document.onkeyup = null;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user