refactoring

This commit is contained in:
Maxim Devaev
2022-04-12 06:26:38 +03:00
parent 80b5546d21
commit 1e5c8535f6
2 changed files with 21 additions and 17 deletions

View File

@@ -38,6 +38,7 @@ from aiohttp.web import Request
from aiohttp.web import Response
from aiohttp.web import StreamResponse
from aiohttp.web import WebSocketResponse
from aiohttp.web import WSMsgType
from aiohttp.web import Application
from aiohttp.web import run_app
from aiohttp.web import normalize_path_middleware
@@ -220,7 +221,7 @@ async def broadcast_ws_event(wss: List[WebSocketResponse], event_type: str, even
], return_exceptions=True)
def parse_ws_event(msg: str) -> Tuple[str, Dict]:
def _parse_ws_event(msg: str) -> Tuple[str, Dict]:
data = json.loads(msg)
if not isinstance(data, dict):
raise RuntimeError("Top-level event structure is not a dict")
@@ -233,6 +234,23 @@ def parse_ws_event(msg: str) -> Tuple[str, Dict]:
return (event_type, event)
async def process_ws_messages(ws: WebSocketResponse, handlers: Dict[str, Callable]) -> None:
logger = get_logger(1)
async for msg in ws:
if msg.type != WSMsgType.TEXT:
break
try:
(event_type, event) = _parse_ws_event(msg.data)
except Exception as err:
logger.error("Can't parse JSON event from websocket: %r", err)
else:
handler = handlers.get(event_type)
if handler:
await handler(ws, event)
else:
logger.error("Unknown websocket event: %r", msg.data)
# =====
_REQUEST_AUTH_INFO = "_kvmd_auth_info"