fix: use fresh beaver message id after reconnect

This commit is contained in:
0Xiao0
2026-06-02 10:33:03 +08:00
parent 879c73bfee
commit af261d3b63
2 changed files with 8 additions and 4 deletions

View File

@ -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)

View File

@ -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"]