diff --git a/telethon/network/connection.py b/telethon/network/connection.py index d333b8ff..28c548eb 100644 --- a/telethon/network/connection.py +++ b/telethon/network/connection.py @@ -130,6 +130,13 @@ class Connection: def close(self): self.conn.close() + def clone(self): + """Creates a copy of this Connection""" + return Connection(self.ip, self.port, + mode=self._mode, + proxy=self.conn.proxy, + timeout=self.conn.timeout) + # region Receive message implementations def recv(self): diff --git a/telethon/network/mtproto_sender.py b/telethon/network/mtproto_sender.py index 772aa213..6558a20c 100644 --- a/telethon/network/mtproto_sender.py +++ b/telethon/network/mtproto_sender.py @@ -54,6 +54,10 @@ class MtProtoSender: self._need_confirmation.clear() self._clear_all_pending() + def clone(self): + """Creates a copy of this MtProtoSender as a new connection""" + return MtProtoSender(self.session, self.connection.clone()) + # region Send and receive def send(self, *requests): diff --git a/telethon/telegram_bare_client.py b/telethon/telegram_bare_client.py index 010ae086..04398826 100644 --- a/telethon/telegram_bare_client.py +++ b/telethon/telegram_bare_client.py @@ -388,18 +388,11 @@ class TelegramBareClient: raise ValueError('You can only invoke requests, not types!') # Determine the sender to be used (main or a new connection) - # TODO Polish this so it's nicer on_main_thread = threading.get_ident() == self._main_thread_ident if on_main_thread or self._on_read_thread(): sender = self._sender else: - conn = Connection( - self.session.server_address, self.session.port, - mode=self._sender.connection._mode, - proxy=self._sender.connection.conn.proxy, - timeout=self._sender.connection.get_timeout() - ) - sender = MtProtoSender(self.session, conn) + sender = self._sender.clone() sender.connect() # We should call receive from this thread if there's no background