mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
kvmd: binary ping/pong
This commit is contained in:
parent
94fe2226f1
commit
54f6d93f63
@ -254,6 +254,10 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
async def __ws_ping_handler(self, ws: WsSession, _: dict) -> None:
|
async def __ws_ping_handler(self, ws: WsSession, _: dict) -> None:
|
||||||
await ws.send_event("pong", {})
|
await ws.send_event("pong", {})
|
||||||
|
|
||||||
|
@exposed_ws(0)
|
||||||
|
async def __ws_bin_ping_handler(self, ws: WsSession, _: bytes) -> None:
|
||||||
|
await ws.send_bin(255, b"") # Ping-pong
|
||||||
|
|
||||||
# ===== SYSTEM STUFF
|
# ===== SYSTEM STUFF
|
||||||
|
|
||||||
def run(self, **kwargs: Any) -> None: # type: ignore # pylint: disable=arguments-differ
|
def run(self, **kwargs: Any) -> None: # type: ignore # pylint: disable=arguments-differ
|
||||||
|
|||||||
@ -301,8 +301,16 @@ export function Session() {
|
|||||||
if (http.status === 200) {
|
if (http.status === 200) {
|
||||||
__ws = new WebSocket(tools.makeWsUrl("api/ws"));
|
__ws = new WebSocket(tools.makeWsUrl("api/ws"));
|
||||||
__ws.sendHidEvent = (event) => __sendHidEvent(__ws, event.event_type, event.event);
|
__ws.sendHidEvent = (event) => __sendHidEvent(__ws, event.event_type, event.event);
|
||||||
|
__ws.binaryType = "arraybuffer";
|
||||||
__ws.onopen = __wsOpenHandler;
|
__ws.onopen = __wsOpenHandler;
|
||||||
__ws.onmessage = __wsMessageHandler;
|
__ws.onmessage = async (event) => {
|
||||||
|
if (typeof event.data === "string") {
|
||||||
|
event = JSON.parse(event.data);
|
||||||
|
__wsJsonHandler(event.event_type, event.event);
|
||||||
|
} else { // Binary
|
||||||
|
__wsBinHandler(event.data);
|
||||||
|
}
|
||||||
|
};
|
||||||
__ws.onerror = __wsErrorHandler;
|
__ws.onerror = __wsErrorHandler;
|
||||||
__ws.onclose = __wsCloseHandler;
|
__ws.onclose = __wsCloseHandler;
|
||||||
} else if (http.status === 401 || http.status === 403) {
|
} else if (http.status === 401 || http.status === 403) {
|
||||||
@ -369,33 +377,37 @@ export function Session() {
|
|||||||
__ping_timer = setInterval(__pingServer, 1000);
|
__ping_timer = setInterval(__pingServer, 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
var __wsMessageHandler = function(event) {
|
var __wsBinHandler = function(data) {
|
||||||
// tools.debug("Session: received socket data:", event.data);
|
data = new Uint8Array(data);
|
||||||
let data = JSON.parse(event.data);
|
if (data[0] === 255) { // Pong
|
||||||
switch (data.event_type) {
|
__missed_heartbeats = 0;
|
||||||
case "pong": __missed_heartbeats = 0; break;
|
}
|
||||||
case "info": __setInfoState(data.event); break;
|
};
|
||||||
case "gpio": __gpio.setState(data.event); break;
|
|
||||||
case "hid": __hid.setState(data.event); break;
|
var __wsJsonHandler = function(event_type, event) {
|
||||||
case "hid_keymaps": __paste.setState(data.event); break;
|
switch (event_type) {
|
||||||
case "atx": __atx.setState(data.event); break;
|
case "info": __setInfoState(event); break;
|
||||||
case "streamer": __streamer.setState(data.event); break;
|
case "gpio": __gpio.setState(event); break;
|
||||||
case "ocr": __ocr.setState(data.event); break;
|
case "hid": __hid.setState(event); break;
|
||||||
|
case "hid_keymaps": __paste.setState(event); break;
|
||||||
|
case "atx": __atx.setState(event); break;
|
||||||
|
case "streamer": __streamer.setState(event); break;
|
||||||
|
case "ocr": __ocr.setState(event); break;
|
||||||
|
|
||||||
case "msd":
|
case "msd":
|
||||||
if (data.event.online === false) {
|
if (event.online === false) {
|
||||||
__switch.setMsdConnected(false);
|
__switch.setMsdConnected(false);
|
||||||
} else if (data.event.drive !== undefined) {
|
} else if (event.drive !== undefined) {
|
||||||
__switch.setMsdConnected(data.event.drive.connected);
|
__switch.setMsdConnected(event.drive.connected);
|
||||||
}
|
}
|
||||||
__msd.setState(data.event);
|
__msd.setState(event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "switch":
|
case "switch":
|
||||||
if (data.event.model) {
|
if (event.model) {
|
||||||
__atx.setHasSwitch(data.event.model.ports.length > 0);
|
__atx.setHasSwitch(event.model.ports.length > 0);
|
||||||
}
|
}
|
||||||
__switch.setState(data.event);
|
__switch.setState(event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -442,7 +454,7 @@ export function Session() {
|
|||||||
if (__missed_heartbeats >= 15) {
|
if (__missed_heartbeats >= 15) {
|
||||||
throw new Error("Too many missed heartbeats");
|
throw new Error("Too many missed heartbeats");
|
||||||
}
|
}
|
||||||
__ws.send("{\"event_type\": \"ping\", \"event\": {}}");
|
__ws.send(new Uint8Array([0]));
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
__wsErrorHandler(ex.message);
|
__wsErrorHandler(ex.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,7 +87,8 @@ export function MediaStreamer(__setActive, __setInactive, __setInfo, __orient) {
|
|||||||
__ws.onclose = __wsCloseHandler;
|
__ws.onclose = __wsCloseHandler;
|
||||||
__ws.onmessage = async (event) => {
|
__ws.onmessage = async (event) => {
|
||||||
if (typeof event.data === "string") {
|
if (typeof event.data === "string") {
|
||||||
__wsJsonHandler(JSON.parse(event.data));
|
event = JSON.parse(event.data);
|
||||||
|
__wsJsonHandler(event.event_type, event.event);
|
||||||
} else { // Binary
|
} else { // Binary
|
||||||
await __wsBinHandler(event.data);
|
await __wsBinHandler(event.data);
|
||||||
}
|
}
|
||||||
@ -153,9 +154,9 @@ export function MediaStreamer(__setActive, __setInactive, __setInfo, __orient) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var __wsJsonHandler = function(event) {
|
var __wsJsonHandler = function(event_type, event) {
|
||||||
if (event.event_type === "media") {
|
if (event_type === "media") {
|
||||||
__decoderCreate(event.event.video);
|
__decoderCreate(event.video);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user