def execute(self, method, *args, timeout=45.0):
"""
Query the dedicated server and return the results. This method is a coroutine and should be awaited on.
The result you get will be a tuple with data inside (the response payload).
:param method: Server method.
:param args: Arguments.
:param timeout: Wait for x seconds until future is returned. Default is 45 seconds.
:type method: str
:type args: any
:return: Tuple with response data (after awaiting).
:rtype: Future<tuple>
"""
request_bytes = dumps(args, methodname=method, allow_none=True).encode()
length_bytes = len(request_bytes).to_bytes(4, byteorder='little')
handler = self.get_next_handler()
handler_bytes = handler.to_bytes(4, byteorder='little')
# Create new future to be returned.
self.handlers[handler] = future = asyncio.Future()
# Send to server.
self.writer.write(length_bytes + handler_bytes + request_bytes)
return await asyncio.wait_for(future, timeout)
评论列表
文章目录