From af261d3b6352c2ad7f55f87b30d2d0c73f35b2c4 Mon Sep 17 00:00:00 2001 From: 0Xiao0 <511201264@qq.com> Date: Tue, 2 Jun 2026 10:33:03 +0800 Subject: [PATCH] fix: use fresh beaver message id after reconnect --- beaver_terminal_client.py | 6 +++--- test_beaver_terminal_client.py | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/beaver_terminal_client.py b/beaver_terminal_client.py index 039b967..dc14eb7 100644 --- a/beaver_terminal_client.py +++ b/beaver_terminal_client.py @@ -88,13 +88,13 @@ class BeaverTerminalClient: self.session_id = session_id if isinstance(session_id, str) else None async def send_text(self, text: str) -> str: - message_id = self._message_ids.next_id() - message_frame = build_message_frame(message_id=message_id, text=text) - for attempt in range(2): if not self._websocket_is_open(): await self.connect() + message_id = self._message_ids.next_id() + message_frame = build_message_frame(message_id=message_id, text=text) + try: await self._send_json(message_frame) return await self._wait_for_reply(message_id) diff --git a/test_beaver_terminal_client.py b/test_beaver_terminal_client.py index dc6ee8a..bb1b00b 100644 --- a/test_beaver_terminal_client.py +++ b/test_beaver_terminal_client.py @@ -340,6 +340,7 @@ async def test_client_reconnects_with_same_peer_id_when_socket_closes_before_sen unused_tcp_port: int, ) -> None: connect_peer_ids: list[str] = [] + message_ids: list[str] = [] connection_count = 0 async def websocket_handler(request: web.Request) -> web.WebSocketResponse: @@ -360,9 +361,11 @@ async def test_client_reconnects_with_same_peer_id_when_socket_closes_before_sen "session_id": "terminal-dev:local:device-001", } ) + elif frame["type"] == "message": + message_ids.append(frame["message_id"]) if current_connection == 1: await ws.close() - elif frame["type"] == "message": + continue await ws.send_json( { "type": "ack", @@ -407,3 +410,4 @@ async def test_client_reconnects_with_same_peer_id_when_socket_closes_before_sen assert reply == "reply after reconnect" assert connect_peer_ids == ["device-001", "device-001"] + assert message_ids == ["device-001-000001", "device-001-000002"]