diff options
| author | AAGaming <aa@mail.catvibers.me> | 2022-11-25 23:19:21 -0500 |
|---|---|---|
| committer | marios8543 <marios8543@gmail.com> | 2023-11-14 00:03:47 +0200 |
| commit | 4a9b45b98e9540c7d83ba603e65197b79daa7c9b (patch) | |
| tree | 6bab0260798c13116f30e2c7549b0ca07fbed5a0 /backend/decky_loader/wsrouter.py | |
| parent | 8f299a90dc25c79852376be75947557177d5e11a (diff) | |
| download | decky-loader-4a9b45b98e9540c7d83ba603e65197b79daa7c9b.tar.gz decky-loader-4a9b45b98e9540c7d83ba603e65197b79daa7c9b.zip | |
initial WSRouter implementation
Diffstat (limited to 'backend/decky_loader/wsrouter.py')
| -rw-r--r-- | backend/decky_loader/wsrouter.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/backend/decky_loader/wsrouter.py b/backend/decky_loader/wsrouter.py new file mode 100644 index 00000000..c501025e --- /dev/null +++ b/backend/decky_loader/wsrouter.py @@ -0,0 +1,46 @@ +from logging import getLogger + +from aiohttp import web + + +class WSRouter: + def __init__(self) -> None: + self.ws = None + self.routes = {} + self.logger = getLogger("WSRouter") + + async def add_routes(self, routes): + self.routes.update(routes) + + async def handle(self, request): + self.logger.debug('Websocket connection starting') + ws = web.WebSocketResponse() + await ws.prepare(request) + self.logger.debug('Websocket connection ready') + + self.ws = ws + + try: + async for msg in ws: + self.logger.debug(msg) + if msg.type == aiohttp.WSMsgType.TEXT: + self.logger.debug(msg.data) + if msg.data == 'close': + # DO NOT RELY ON THIS! + break + else: + # do stuff with the message + data = msg.json() + if self.routes[data.route]: + res = await self.routes[data.route](data.data) + finally: + try: + await ws.close() + except: + pass + + self.logger.debug('Websocket connection closed') + return ws + + async def write(self, dta: Dict[str, any]): + await self.ws.send_json(dta)
\ No newline at end of file |
