refactor: split websocket flows and add brain action decision pipeline
This commit is contained in:
57
core/websocket_connection_flow.py
Normal file
57
core/websocket_connection_flow.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import asyncio
|
||||
import websockets
|
||||
|
||||
|
||||
async def connect_flow(client):
|
||||
"""连接 WebSocket 服务器并自动重连。"""
|
||||
while client.running:
|
||||
try:
|
||||
client.logger.info(f"[{client.get_time()}] 正在连接轻简API {client.uri}...")
|
||||
async with websockets.connect(client.uri) as websocket:
|
||||
client.websocket = websocket
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(True)
|
||||
client.logger.info(f"[{client.get_time()}] 连接成功!")
|
||||
if client.enable_agent:
|
||||
client.logger.info(f"[{client.get_time()}] AI Agent 已启用,将自动处理消息")
|
||||
client.logger.info(f"[{client.get_time()}] 等待接收消息...")
|
||||
|
||||
await client.receive_messages()
|
||||
|
||||
except ConnectionRefusedError:
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(False)
|
||||
client.logger.info(f"[{client.get_time()}] 连接被拒绝,请检查轻简软件是否已启动")
|
||||
except websockets.exceptions.InvalidURI:
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(False)
|
||||
client.logger.info(f"[{client.get_time()}] URI格式错误")
|
||||
except Exception as e:
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(False)
|
||||
client.logger.info(f"[{client.get_time()}] 连接错误: {e}")
|
||||
|
||||
if client.running:
|
||||
client.logger.info(f"[{client.get_time()}] 5秒后尝试重连...")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
|
||||
async def receive_messages_flow(client):
|
||||
"""持续接收消息。"""
|
||||
try:
|
||||
async for message in client.websocket:
|
||||
await client.handle_message(message)
|
||||
except websockets.exceptions.ConnectionClosed:
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(False)
|
||||
client.logger.info(f"[{client.get_time()}] 连接已关闭")
|
||||
except Exception as e:
|
||||
from utils.health_check import set_qingjian_connected
|
||||
set_qingjian_connected(False)
|
||||
client.logger.info(f"[{client.get_time()}] 接收消息错误: {e}")
|
||||
|
||||
|
||||
async def handle_message_flow(client, message, *, shop_type_resolver):
|
||||
from core.websocket_inbound_flow import handle_incoming_message
|
||||
|
||||
await handle_incoming_message(client, message, shop_type_resolver=shop_type_resolver)
|
||||
Reference in New Issue
Block a user