""" 轻量级服务端 Session 存储。 以客户端 IP + User-Agent 的哈希值作为 session key, 无需 cookie,无需前端改动。 每次 getScenes 写入,StartVoiceChat/StopVoiceChat 读取。 """ import hashlib from fastapi import Request # { session_key: { scene_id: { RoomId, UserId, TaskId } } } _store: dict[str, dict[str, dict]] = {} def _key(request: Request) -> str: forwarded = request.headers.get("X-Forwarded-For") ip = ( forwarded.split(",")[0].strip() if forwarded else (request.client.host if request.client else "unknown") ) ua = request.headers.get("User-Agent", "") return hashlib.sha256(f"{ip}:{ua}".encode()).hexdigest() def save_session(request: Request, scene_id: str, data: dict) -> None: key = _key(request) if key not in _store: _store[key] = {} _store[key][scene_id] = data def load_session(request: Request, scene_id: str) -> dict: return _store.get(_key(request), {}).get(scene_id, {})