add banbanmini backend
This commit is contained in:
53
talkingq-url/handlers/session_cleanup_handler.py
Normal file
53
talkingq-url/handlers/session_cleanup_handler.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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], "已从会话管理器中移除会话"
|
||||
)
|
||||
Reference in New Issue
Block a user