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