From 471bd61e78b078fe31e6684773837bfa29abdf24 Mon Sep 17 00:00:00 2001 From: Richard Neumann Date: Mon, 24 Jul 2023 14:52:18 +0200 Subject: [PATCH] Join multiple responses --- rcon/battleye/client.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rcon/battleye/client.py b/rcon/battleye/client.py index face11c..f1e2511 100644 --- a/rcon/battleye/client.py +++ b/rcon/battleye/client.py @@ -51,18 +51,27 @@ class Client(BaseClient, socket_type=SOCK_DGRAM): )).type ].from_bytes(header, data[8:]) - def receive(self, file: BufferedWriter) -> Response: + def receive(self, file: BufferedWriter) -> Response | bytes: """Receive a message.""" + server_messages = set() + while isinstance( response := self._receive(self.max_length), ServerMessage ): + server_messages.add(response) file.write(bytes(ServerMessageAck(response.seq))) self._handle_server_message(response) - return response + if not server_messages: + return response + + return b''.join( + msg.payload for msg in + sorted(server_messages, key=lambda msg: msg.seq) + ) - def communicate(self, request: Request) -> Response: + def communicate(self, request: Request) -> Response | bytes: """Send a request and receive a response.""" with self._socket.makefile('wb') as file: file.write(bytes(request))