Remove _next_ping

This commit is contained in:
Jahongir Qurbonov 2024-10-18 19:59:14 +05:00
parent 65fb0b6f89
commit e46606ed95

View File

@ -172,7 +172,6 @@ class Sender:
_updates: list[Updates] _updates: list[Updates]
_requests: list[Request[object]] _requests: list[Request[object]]
_request_event: Event _request_event: Event
_next_ping: float
_read_buffer: bytearray _read_buffer: bytearray
_write_drain_pending: bool _write_drain_pending: bool
_step_counter: int _step_counter: int
@ -204,7 +203,6 @@ class Sender:
_updates=[], _updates=[],
_requests=[], _requests=[],
_request_event=Event(), _request_event=Event(),
_next_ping=asyncio.get_running_loop().time() + PING_DELAY,
_read_buffer=bytearray(), _read_buffer=bytearray(),
_write_drain_pending=False, _write_drain_pending=False,
_step_counter=0, _step_counter=0,
@ -260,9 +258,7 @@ class Sender:
recv_data = asyncio.create_task(self._reader.read(MAXIMUM_DATA)) recv_data = asyncio.create_task(self._reader.read(MAXIMUM_DATA))
send_data = asyncio.create_task(self._do_send()) send_data = asyncio.create_task(self._do_send())
done, pending = await asyncio.wait( done, pending = await asyncio.wait(
(recv_req, recv_data, send_data), (recv_req, recv_data, send_data), return_when=FIRST_COMPLETED
timeout=self._next_ping - asyncio.get_running_loop().time(),
return_when=FIRST_COMPLETED,
) )
if pending: if pending:
@ -274,13 +270,18 @@ class Sender:
if recv_req in done: if recv_req in done:
self._request_event.clear() self._request_event.clear()
if recv_data in done: if recv_data in done:
try:
result = self._on_net_read(recv_data.result()) result = self._on_net_read(recv_data.result())
except TimeoutError:
self._on_ping_timeout()
if send_data in done: if send_data in done:
self._on_net_write() self._on_net_write()
if not done:
self._on_ping_timeout()
return result 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: async def _do_send(self) -> None:
if self._write_drain_pending: if self._write_drain_pending:
self._on_net_write() 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: def _process_mtp_buffer(self) -> None:
results = self._mtp.deserialize(self._mtp_buffer) results = self._mtp.deserialize(self._mtp_buffer)
@ -519,5 +519,4 @@ async def generate_auth_key(sender: Sender) -> Sender:
first_salt = finished.first_salt first_salt = finished.first_salt
sender._mtp = Encrypted(auth_key, time_offset=time_offset, first_salt=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 return sender