diff --git a/Html/apps/extension_ase/ase_client/client.py b/Html/apps/extension_ase/ase_client/client.py
index bef2f36..2cc6f9e 100644
--- a/Html/apps/extension_ase/ase_client/client.py
+++ b/Html/apps/extension_ase/ase_client/client.py
@@ -228,7 +228,7 @@ class ASEngineClient:
self.sid = None
print("Disconnected from server")
- def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5) -> bool:
+ def send_text(self, route: str, text: str, id:str="", wait_for_ack: bool = False, timeout: int = 5, return_event: bool = False) -> Any:
"""
发送文本消息
:param route: 目标路由
@@ -236,7 +236,8 @@ class ASEngineClient:
:param id: 发送者ID
:param wait_for_ack: 是否等待服务器ACK确认
:param timeout: 等待ACK的超时时间(秒)
- :return: 是否发送成功(若wait_for_ack为True,则返回是否收到ACK)
+ :param return_event: 是否返回事件对象和ack_id而不是等待ACK
+ :return: 如果wait_for_ack为True且return_event为False,返回是否收到ACK;如果return_event为True,返回(event, ack_id);否则返回是否发送成功
"""
if not self.connected:
print("Not connected to server")
@@ -268,6 +269,10 @@ class ASEngineClient:
event = Event()
self.ack_events[ack_id] = event
+ # 如果需要返回事件对象,直接返回
+ if return_event:
+ return event, ack_id
+
# 等待ACK或超时
received_ack = event.wait(timeout=timeout)
@@ -428,6 +433,31 @@ class HSAEngineClient(ASEngineClient):
super().__init__(server_url, namespace, id)
self.chatmanager = chatmanager
def loadmarkdown(self, fmd, fmdp, fsp):
- self.send_text('markdown-in', fmd, self.id, wait_for_ack=True)
- self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True)
- self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True)
+ # 并行发送三个消息,获取事件对象和ack_id
+ event1, ack_id1 = self.send_text('markdown-in', fmd, self.id, wait_for_ack=True, return_event=True)
+ event2, ack_id2 = self.send_text('markdown-prompt-in', fmdp, self.id, wait_for_ack=True, return_event=True)
+ event3, ack_id3 = self.send_text('score-prompt-in', fsp, self.id, wait_for_ack=True, return_event=True)
+
+ # 等待所有事件完成
+ timeout = 5 # 超时时间
+ success1 = event1.wait(timeout=timeout)
+ success2 = event2.wait(timeout=timeout)
+ success3 = event3.wait(timeout=timeout)
+
+ # 清理ACK事件
+ if ack_id1 in self.ack_events:
+ del self.ack_events[ack_id1]
+ if ack_id2 in self.ack_events:
+ del self.ack_events[ack_id2]
+ if ack_id3 in self.ack_events:
+ del self.ack_events[ack_id3]
+
+ # 检查是否所有ACK都成功收到
+ if not success1:
+ print(f"ACK timeout for message: {ack_id1}")
+ if not success2:
+ print(f"ACK timeout for message: {ack_id2}")
+ if not success3:
+ print(f"ACK timeout for message: {ack_id3}")
+
+ return success1 and success2 and success3