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], "已从会话管理器中移除会话" )