Files
banban/talkingq-url/handlers/session_cleanup_handler.py
2026-03-24 15:04:36 +08:00

54 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from services.interrupt_handler import interrupt_handler
from services.audio_session import audio_session_manager
from utils.logger import session_logger
async def handle_old_session_cleanup(old_session, session_key):
"""
清理旧会话资源
Args:
old_session: 需要清理的会话对象
session_key: 会话键 (device_id, session_id)
"""
try:
device_id, session_id = session_key
session_logger.info(device_id, session_id, "开始主动清理旧会话资源")
if hasattr(old_session, "register_interrupt_handlers"):
await old_session.register_interrupt_handlers()
await interrupt_handler.set_interrupt_state(session_key, True)
await interrupt_handler.handle_interrupt(session_key)
except Exception as e:
session_logger.error("unknown", "unknown", f"清理旧会话资源时出错: {e}")
async def cleanup_device_sessions(device_id):
"""
清理设备所有会话
Args:
device_id: 设备ID
"""
sessions_to_clean = []
for session_key, session in await audio_session_manager.get_all_sessions():
if session_key[0] == device_id:
sessions_to_clean.append((session_key, session))
for session_key, session in sessions_to_clean:
if hasattr(session, "set_interrupted"):
session_logger.info(
device_id, session_key[1], "WebSocket连接断开中断会话"
)
await session.set_interrupted(True)
await interrupt_handler.handle_interrupt(session_key)
else:
await interrupt_handler.set_interrupt_state(session_key, True)
if session.llm_service and hasattr(session.llm_service, "closed"):
session.llm_service.closed = True
for session_key, _ in sessions_to_clean:
await audio_session_manager.remove_session(session_key)
await interrupt_handler.remove_session(session_key)
session_logger.info(
device_id, session_key[1], "已从会话管理器中移除会话"
)