mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
ws api refactoring
This commit is contained in:
parent
3048fc7923
commit
f5a6fe35a9
@ -64,7 +64,7 @@ def get_exposed_http(obj: object) -> List[HttpExposed]:
|
|||||||
handler=handler,
|
handler=handler,
|
||||||
)
|
)
|
||||||
for name in dir(obj)
|
for name in dir(obj)
|
||||||
if inspect.ismethod(handler := getattr(obj, name)) and getattr(handler, _HTTP_EXPOSED, False)
|
if inspect.ismethod(handler := getattr(obj, name)) and getattr(handler, _HTTP_EXPOSED, False) # noqa: E203
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ def get_exposed_ws(obj: object) -> List[WsExposed]:
|
|||||||
handler=handler,
|
handler=handler,
|
||||||
)
|
)
|
||||||
for name in dir(obj)
|
for name in dir(obj)
|
||||||
if inspect.ismethod(handler := getattr(obj, name)) and getattr(handler, _WS_EXPOSED, False)
|
if inspect.ismethod(handler := getattr(obj, name)) and getattr(handler, _WS_EXPOSED, False) # noqa: E203
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -249,22 +249,24 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
async for msg in ws:
|
async for msg in ws:
|
||||||
if msg.type == aiohttp.web.WSMsgType.TEXT:
|
if msg.type == aiohttp.web.WSMsgType.TEXT:
|
||||||
try:
|
try:
|
||||||
event = json.loads(msg.data)
|
data = json.loads(msg.data)
|
||||||
|
event_type = data.get("event_type")
|
||||||
|
event = data["event"]
|
||||||
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: %r", err)
|
||||||
else:
|
else:
|
||||||
handler = self.__ws_handlers.get(event.get("event_type"))
|
handler = self.__ws_handlers.get(event_type)
|
||||||
if handler:
|
if handler:
|
||||||
await handler(ws, event)
|
await handler(ws, event)
|
||||||
else:
|
else:
|
||||||
logger.error("Unknown websocket event: %r", event)
|
logger.error("Unknown websocket event: %r", data)
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
return ws
|
return ws
|
||||||
|
|
||||||
@exposed_ws("ping")
|
@exposed_ws("ping")
|
||||||
async def __ws_ping_handler(self, ws: aiohttp.web.WebSocketResponse, _: Dict) -> None:
|
async def __ws_ping_handler(self, ws: aiohttp.web.WebSocketResponse, _: Dict) -> None:
|
||||||
await ws.send_str(json.dumps({"msg_type": "pong"}))
|
await ws.send_str(json.dumps({"event_type": "pong", "event": {}}))
|
||||||
|
|
||||||
# ===== SYSTEM STUFF
|
# ===== SYSTEM STUFF
|
||||||
|
|
||||||
@ -377,15 +379,12 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Cleanup error on %s", name)
|
logger.exception("Cleanup error on %s", name)
|
||||||
|
|
||||||
async def __broadcast_event(self, event_type: _Events, event_attrs: Dict) -> None:
|
async def __broadcast_event(self, event_type: _Events, event: Dict) -> None:
|
||||||
if self.__sockets:
|
if self.__sockets:
|
||||||
await asyncio.gather(*[
|
await asyncio.gather(*[
|
||||||
ws.send_str(json.dumps({
|
ws.send_str(json.dumps({
|
||||||
"msg_type": "event",
|
"event_type": event_type.value,
|
||||||
"msg": {
|
"event": event,
|
||||||
"event": event_type.value,
|
|
||||||
"event_attrs": event_attrs,
|
|
||||||
},
|
|
||||||
}))
|
}))
|
||||||
for ws in list(self.__sockets)
|
for ws in list(self.__sockets)
|
||||||
if not ws.closed and ws._req is not None and ws._req.transport is not None # pylint: disable=protected-access
|
if not ws.closed and ws._req is not None and ws._req.transport is not None # pylint: disable=protected-access
|
||||||
|
|||||||
@ -126,9 +126,8 @@ export function Keyboard() {
|
|||||||
tools.debug("Keyboard: key", (state ? "pressed:" : "released:"), code);
|
tools.debug("Keyboard: key", (state ? "pressed:" : "released:"), code);
|
||||||
if (__ws) {
|
if (__ws) {
|
||||||
__ws.send(JSON.stringify({
|
__ws.send(JSON.stringify({
|
||||||
event_type: "key",
|
"event_type": "key",
|
||||||
key: code,
|
"event": {"key": code, "state": state},
|
||||||
state: state,
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -147,9 +147,8 @@ export function Mouse() {
|
|||||||
__sendMove();
|
__sendMove();
|
||||||
if (__ws) {
|
if (__ws) {
|
||||||
__ws.send(JSON.stringify({
|
__ws.send(JSON.stringify({
|
||||||
event_type: "mouse_button",
|
"event_type": "mouse_button",
|
||||||
button: button,
|
"event": {"button": button, "state": state},
|
||||||
state: state,
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -166,8 +165,8 @@ export function Mouse() {
|
|||||||
tools.debug("Mouse: moved:", to);
|
tools.debug("Mouse: moved:", to);
|
||||||
if (__ws) {
|
if (__ws) {
|
||||||
__ws.send(JSON.stringify({
|
__ws.send(JSON.stringify({
|
||||||
event_type: "mouse_move",
|
"event_type": "mouse_move",
|
||||||
to: to,
|
"event": {"to": to},
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
__sent_pos = pos;
|
__sent_pos = pos;
|
||||||
@ -202,8 +201,8 @@ export function Mouse() {
|
|||||||
tools.debug("Mouse: scrolled:", delta);
|
tools.debug("Mouse: scrolled:", delta);
|
||||||
if (__ws) {
|
if (__ws) {
|
||||||
__ws.send(JSON.stringify({
|
__ws.send(JSON.stringify({
|
||||||
event_type: "mouse_wheel",
|
"event_type": "mouse_wheel",
|
||||||
delta: delta,
|
"event": {"delta": delta},
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -114,23 +114,15 @@ export function Session() {
|
|||||||
|
|
||||||
var __wsMessageHandler = function(event) {
|
var __wsMessageHandler = function(event) {
|
||||||
// tools.debug("Session: received socket data:", event.data);
|
// tools.debug("Session: received socket data:", event.data);
|
||||||
event = JSON.parse(event.data);
|
let data = JSON.parse(event.data);
|
||||||
if (event.msg_type === "pong") {
|
switch (data.event_type) {
|
||||||
__missed_heartbeats = 0;
|
case "pong": __missed_heartbeats = 0; break;
|
||||||
} else if (event.msg_type === "event") {
|
case "info_state": __setKvmdInfo(data.event); break;
|
||||||
if (event.msg.event === "info_state") {
|
case "wol_state": __wol.setState(data.event); break;
|
||||||
__setKvmdInfo(event.msg.event_attrs);
|
case "hid_state": __hid.setState(data.event); break;
|
||||||
} else if (event.msg.event === "hid_state") {
|
case "atx_state": __atx.setState(data.event); break;
|
||||||
__hid.setState(event.msg.event_attrs);
|
case "msd_state": __msd.setState(data.event); break;
|
||||||
} else if (event.msg.event === "atx_state") {
|
case "streamer_state": __streamer.setState(data.event); break;
|
||||||
__atx.setState(event.msg.event_attrs);
|
|
||||||
} else if (event.msg.event === "msd_state") {
|
|
||||||
__msd.setState(event.msg.event_attrs);
|
|
||||||
} else if (event.msg.event === "streamer_state") {
|
|
||||||
__streamer.setState(event.msg.event_attrs);
|
|
||||||
} else if (event.msg.event === "wol_state") {
|
|
||||||
__wol.setState(event.msg.event_attrs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -171,7 +163,7 @@ export function Session() {
|
|||||||
if (__missed_heartbeats >= 5) {
|
if (__missed_heartbeats >= 5) {
|
||||||
throw new Error("Too many missed heartbeats");
|
throw new Error("Too many missed heartbeats");
|
||||||
}
|
}
|
||||||
__ws.send(JSON.stringify({"event_type": "ping"}));
|
__ws.send(JSON.stringify({"event_type": "ping", "event": {}}));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
tools.error("Session: ping error:", err.message);
|
tools.error("Session: ping error:", err.message);
|
||||||
if (__ws) {
|
if (__ws) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user