Browse Source

Join multiple responses

pull/20/head
Richard Neumann 2 years ago
parent
commit
471bd61e78
  1. 15
      rcon/battleye/client.py

15
rcon/battleye/client.py

@ -51,18 +51,27 @@ class Client(BaseClient, socket_type=SOCK_DGRAM):
)).type )).type
].from_bytes(header, data[8:]) ].from_bytes(header, data[8:])
def receive(self, file: BufferedWriter) -> Response: def receive(self, file: BufferedWriter) -> Response | bytes:
"""Receive a message.""" """Receive a message."""
server_messages = set()
while isinstance( while isinstance(
response := self._receive(self.max_length), response := self._receive(self.max_length),
ServerMessage ServerMessage
): ):
server_messages.add(response)
file.write(bytes(ServerMessageAck(response.seq))) file.write(bytes(ServerMessageAck(response.seq)))
self._handle_server_message(response) 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.""" """Send a request and receive a response."""
with self._socket.makefile('wb') as file: with self._socket.makefile('wb') as file:
file.write(bytes(request)) file.write(bytes(request))

Loading…
Cancel
Save