Skip to content

Commit ae028ab

Browse files
committed
Switch back to local system time synchronization
perf_counter will stop counting when the system goes to sleep, causing the generation of invalid message ids after waking up which in turn put the client into a never ending reconnecting loop due to check mismatches caused by the time not being synced anymore. It's also unclear whether perf_counter stays in sync during long runs.
1 parent 13094f1 commit ae028ab

2 files changed

Lines changed: 5 additions & 18 deletions

File tree

pyrogram/session/internals/msg_id.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,19 @@
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

1919
import logging
20-
from datetime import datetime
21-
from time import perf_counter
20+
import time
2221

2322
log = logging.getLogger(__name__)
2423

2524

2625
class MsgId:
27-
reference_clock = 0
2826
last_time = 0
29-
msg_id_offset = 0
30-
server_time = 0
27+
offset = 0
3128

3229
def __new__(cls) -> int:
33-
now = perf_counter() - cls.reference_clock + cls.server_time
34-
cls.msg_id_offset = cls.msg_id_offset + 4 if now == cls.last_time else 0
35-
msg_id = int(now * 2 ** 32) + cls.msg_id_offset
30+
now = time.time()
31+
cls.offset = (cls.offset + 4) if now == cls.last_time else 0
32+
msg_id = int(now * 2 ** 32) + cls.offset
3633
cls.last_time = now
3734

3835
return msg_id
39-
40-
@classmethod
41-
def set_server_time(cls, server_time: int):
42-
if not cls.server_time:
43-
cls.reference_clock = perf_counter()
44-
cls.server_time = server_time
45-
log.info(f"Time synced: {datetime.utcfromtimestamp(server_time)} UTC")

pyrogram/session/session.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,6 @@ async def handle_packet(self, packet):
203203
log.debug(data)
204204

205205
for msg in messages:
206-
if msg.seq_no == 0:
207-
MsgId.set_server_time(msg.msg_id / (2 ** 32))
208-
209206
if msg.seq_no % 2 != 0:
210207
if msg.msg_id in self.pending_acks:
211208
continue

0 commit comments

Comments
 (0)