mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
refactoring
This commit is contained in:
parent
6bd2b9c680
commit
80b5546d21
@ -100,14 +100,12 @@ def main(argv: Optional[List[str]]=None) -> None:
|
|||||||
**config.snapshot._unpack(),
|
**config.snapshot._unpack(),
|
||||||
),
|
),
|
||||||
|
|
||||||
heartbeat=config.server.heartbeat,
|
|
||||||
|
|
||||||
keymap_path=config.hid.keymap,
|
keymap_path=config.hid.keymap,
|
||||||
ignore_keys=config.hid.ignore_keys,
|
ignore_keys=config.hid.ignore_keys,
|
||||||
mouse_x_range=(config.hid.mouse_x_range.min, config.hid.mouse_x_range.max),
|
mouse_x_range=(config.hid.mouse_x_range.min, config.hid.mouse_x_range.max),
|
||||||
mouse_y_range=(config.hid.mouse_y_range.min, config.hid.mouse_y_range.max),
|
mouse_y_range=(config.hid.mouse_y_range.min, config.hid.mouse_y_range.max),
|
||||||
|
|
||||||
stream_forever=config.streamer.forever,
|
stream_forever=config.streamer.forever,
|
||||||
).run(**config.server._unpack(ignore=["heartbeat"]))
|
).run(**config.server._unpack())
|
||||||
|
|
||||||
get_logger(0).info("Bye-bye")
|
get_logger(0).info("Bye-bye")
|
||||||
|
|||||||
@ -157,8 +157,6 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
streamer: Streamer,
|
streamer: Streamer,
|
||||||
snapshoter: Snapshoter,
|
snapshoter: Snapshoter,
|
||||||
|
|
||||||
heartbeat: float,
|
|
||||||
|
|
||||||
keymap_path: str,
|
keymap_path: str,
|
||||||
ignore_keys: List[str],
|
ignore_keys: List[str],
|
||||||
mouse_x_range: Tuple[int, int],
|
mouse_x_range: Tuple[int, int],
|
||||||
@ -173,8 +171,6 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
self.__snapshoter = snapshoter # Not a component: No state or cleanup
|
self.__snapshoter = snapshoter # Not a component: No state or cleanup
|
||||||
self.__user_gpio = user_gpio # Has extra state "gpio_scheme_state"
|
self.__user_gpio = user_gpio # Has extra state "gpio_scheme_state"
|
||||||
|
|
||||||
self.__heartbeat = heartbeat
|
|
||||||
|
|
||||||
self.__stream_forever = stream_forever
|
self.__stream_forever = stream_forever
|
||||||
|
|
||||||
self.__components = [
|
self.__components = [
|
||||||
@ -254,13 +250,9 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
|
|
||||||
@exposed_http("GET", "/ws")
|
@exposed_http("GET", "/ws")
|
||||||
async def __ws_handler(self, request: aiohttp.web.Request) -> aiohttp.web.WebSocketResponse:
|
async def __ws_handler(self, request: aiohttp.web.Request) -> aiohttp.web.WebSocketResponse:
|
||||||
logger = get_logger(0)
|
stream = valid_bool(request.query.get("stream", "true"))
|
||||||
|
ws = await self._make_ws_response(request)
|
||||||
client = _WsClient(
|
client = _WsClient(ws, stream)
|
||||||
ws=aiohttp.web.WebSocketResponse(heartbeat=self.__heartbeat),
|
|
||||||
stream=valid_bool(request.query.get("stream", "true")),
|
|
||||||
)
|
|
||||||
await client.ws.prepare(request)
|
|
||||||
await self.__register_ws_client(client)
|
await self.__register_ws_client(client)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -281,27 +273,27 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins
|
|||||||
))
|
))
|
||||||
for stage in [stage1, stage2]:
|
for stage in [stage1, stage2]:
|
||||||
await asyncio.gather(*[
|
await asyncio.gather(*[
|
||||||
send_ws_event(client.ws, event_type, events.pop(event_type))
|
send_ws_event(ws, event_type, events.pop(event_type))
|
||||||
for (event_type, _) in stage
|
for (event_type, _) in stage
|
||||||
])
|
])
|
||||||
|
|
||||||
await send_ws_event(client.ws, "loop", {})
|
await send_ws_event(ws, "loop", {})
|
||||||
|
|
||||||
async for msg in client.ws:
|
async for msg in ws:
|
||||||
if msg.type != aiohttp.web.WSMsgType.TEXT:
|
if msg.type != aiohttp.web.WSMsgType.TEXT:
|
||||||
break
|
break
|
||||||
try:
|
try:
|
||||||
(event_type, event) = parse_ws_event(msg.data)
|
(event_type, event) = parse_ws_event(msg.data)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't parse JSON event from websocket: %r", err)
|
get_logger(0).error("Can't parse JSON event from websocket: %r", err)
|
||||||
else:
|
else:
|
||||||
handler = self.__ws_handlers.get(event_type)
|
handler = self.__ws_handlers.get(event_type)
|
||||||
if handler:
|
if handler:
|
||||||
await handler(client.ws, event)
|
await handler(ws, event)
|
||||||
else:
|
else:
|
||||||
logger.error("Unknown websocket event: %r", msg.data)
|
get_logger(0).error("Unknown websocket event: %r", msg.data)
|
||||||
|
|
||||||
return client.ws
|
return ws
|
||||||
finally:
|
finally:
|
||||||
await self.__remove_ws_client(client)
|
await self.__remove_ws_client(client)
|
||||||
|
|
||||||
|
|||||||
@ -255,9 +255,12 @@ class HttpServer:
|
|||||||
unix_path: str,
|
unix_path: str,
|
||||||
unix_rm: bool,
|
unix_rm: bool,
|
||||||
unix_mode: int,
|
unix_mode: int,
|
||||||
|
heartbeat: float,
|
||||||
access_log_format: str,
|
access_log_format: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
|
self.__heartbeat = heartbeat # pylint: disable=attribute-defined-outside-init
|
||||||
|
|
||||||
if unix_rm and os.path.exists(unix_path):
|
if unix_rm and os.path.exists(unix_path):
|
||||||
os.remove(unix_path)
|
os.remove(unix_path)
|
||||||
server_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
server_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
@ -274,6 +277,15 @@ class HttpServer:
|
|||||||
loop=asyncio.get_event_loop(),
|
loop=asyncio.get_event_loop(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# =====
|
||||||
|
|
||||||
|
async def _make_ws_response(self, request: Request) -> WebSocketResponse:
|
||||||
|
ws = WebSocketResponse(heartbeat=self.__heartbeat)
|
||||||
|
await ws.prepare(request)
|
||||||
|
return ws
|
||||||
|
|
||||||
|
# =====
|
||||||
|
|
||||||
async def _init_app(self, app: Application) -> None:
|
async def _init_app(self, app: Application) -> None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@ -283,6 +295,8 @@ class HttpServer:
|
|||||||
async def _on_cleanup(self, app: Application) -> None:
|
async def _on_cleanup(self, app: Application) -> None:
|
||||||
_ = app
|
_ = app
|
||||||
|
|
||||||
|
# =====
|
||||||
|
|
||||||
async def __make_app(self) -> Application:
|
async def __make_app(self) -> Application:
|
||||||
app = Application(middlewares=[normalize_path_middleware(
|
app = Application(middlewares=[normalize_path_middleware(
|
||||||
append_slash=False,
|
append_slash=False,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user