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