From e46606ed95987bb0aeff80ef4d43f06c1fd555d3 Mon Sep 17 00:00:00 2001 From: Jahongir Qurbonov Date: Fri, 18 Oct 2024 19:59:14 +0500 Subject: [PATCH] Remove _next_ping --- client/src/telethon/_impl/mtsender/sender.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/client/src/telethon/_impl/mtsender/sender.py b/client/src/telethon/_impl/mtsender/sender.py index 94850029..3e647a7b 100644 --- a/client/src/telethon/_impl/mtsender/sender.py +++ b/client/src/telethon/_impl/mtsender/sender.py @@ -172,7 +172,6 @@ class Sender: _updates: list[Updates] _requests: list[Request[object]] _request_event: Event - _next_ping: float _read_buffer: bytearray _write_drain_pending: bool _step_counter: int @@ -204,7 +203,6 @@ class Sender: _updates=[], _requests=[], _request_event=Event(), - _next_ping=asyncio.get_running_loop().time() + PING_DELAY, _read_buffer=bytearray(), _write_drain_pending=False, _step_counter=0, @@ -260,9 +258,7 @@ class Sender: recv_data = asyncio.create_task(self._reader.read(MAXIMUM_DATA)) send_data = asyncio.create_task(self._do_send()) done, pending = await asyncio.wait( - (recv_req, recv_data, send_data), - timeout=self._next_ping - asyncio.get_running_loop().time(), - return_when=FIRST_COMPLETED, + (recv_req, recv_data, send_data), return_when=FIRST_COMPLETED ) if pending: @@ -274,13 +270,18 @@ class Sender: if recv_req in done: self._request_event.clear() if recv_data in done: - result = self._on_net_read(recv_data.result()) + try: + result = self._on_net_read(recv_data.result()) + except TimeoutError: + self._on_ping_timeout() if send_data in done: self._on_net_write() - if not done: - self._on_ping_timeout() return result + async def _do_recv(self) -> bytes: + async with asyncio.timeout(PING_DELAY): + return await self._reader.read(MAXIMUM_DATA) + async def _do_send(self) -> None: if self._write_drain_pending: self._on_net_write() @@ -344,7 +345,6 @@ class Sender: ) ) ) - self._next_ping = asyncio.get_running_loop().time() + PING_DELAY def _process_mtp_buffer(self) -> None: results = self._mtp.deserialize(self._mtp_buffer) @@ -519,5 +519,4 @@ async def generate_auth_key(sender: Sender) -> Sender: first_salt = finished.first_salt sender._mtp = Encrypted(auth_key, time_offset=time_offset, first_salt=first_salt) - sender._next_ping = asyncio.get_running_loop().time() + PING_DELAY return sender