mirror of
https://github.com/fromchat-messenger/web.git
synced 2026-09-22 19:15:08 +03:00
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
from typing import Callable
|
|
|
|
|
|
class WebSocketHandlerRegistry:
|
|
"""Registry for WebSocket message handlers with authentication support."""
|
|
|
|
def __init__(self):
|
|
self._handlers: dict[str, tuple[Callable, bool]] = {}
|
|
|
|
def register(self, message_type: str, authRequired: bool = True):
|
|
"""Register a handler for a message type.
|
|
|
|
Args:
|
|
message_type: The WebSocket message type to handle
|
|
authRequired: If True, handler will receive authenticated User (not None) or raise 401
|
|
"""
|
|
def decorator(func: Callable):
|
|
self._handlers[message_type] = (func, authRequired)
|
|
return func
|
|
return decorator
|
|
|
|
def get_handler(self, message_type: str) -> tuple[Callable, bool] | None:
|
|
"""Get handler and authRequired flag for a message type.
|
|
|
|
Returns:
|
|
Tuple of (handler function, authRequired flag) or None if not found
|
|
"""
|
|
return self._handlers.get(message_type)
|
|
|
|
def get_all_types(self) -> list[str]:
|
|
"""Get all registered message types for debugging/logging."""
|
|
return list(self._handlers.keys())
|
|
|