From 06dab44dc2149e78ce44dd1327c73392f653c887 Mon Sep 17 00:00:00 2001 From: Tony Young Date: Fri, 14 Feb 2014 01:18:52 +1300 Subject: [PATCH] Allow passing eventloop as an argument to connect(). --- pydle/client.py | 4 ++-- pydle/connection.py | 6 +++--- pydle/features/tls.py | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pydle/client.py b/pydle/client.py index eeec6a2..0b6415c 100644 --- a/pydle/client.py +++ b/pydle/client.py @@ -96,14 +96,14 @@ class BasicClient: # Reset any attributes. self._reset_attributes() - def _connect(self, hostname, port, reconnect=False, channels=[], encoding=protocol.DEFAULT_ENCODING, source_address=None): + def _connect(self, hostname, port, reconnect=False, channels=[], encoding=protocol.DEFAULT_ENCODING, source_address=None, eventloop=None): """ Connect to IRC host. """ if not reconnect: self._autojoin_channels = channels # Create connection if we can't reuse it. if not reconnect or not self.connection: - self.connection = connection.Connection(hostname, port or protocol.DEFAULT_PORT, source_adress=source_address) + self.connection = connection.Connection(hostname, port or protocol.DEFAULT_PORT, source_adress=source_address, eventloop=eventloop) self.encoding = encoding # Connect. diff --git a/pydle/connection.py b/pydle/connection.py index 46413a5..e5866e7 100644 --- a/pydle/connection.py +++ b/pydle/connection.py @@ -32,7 +32,7 @@ class Connection: """ A TCP connection over the IRC protocol. """ CONNECT_TIMEOUT = 10 - def __init__(self, hostname, port, tls=False, tls_verify=True, tls_certificate_file=None, tls_certificate_keyfile=None, tls_certificate_password=None, ping_timeout=240, source_address=None): + def __init__(self, hostname, port, tls=False, tls_verify=True, tls_certificate_file=None, tls_certificate_keyfile=None, tls_certificate_password=None, ping_timeout=240, source_address=None, eventloop=None): self.hostname = hostname self.port = port self.source_address = source_address @@ -47,7 +47,7 @@ class Connection: self.socket = None self.socket_lock = threading.RLock() - self.eventloop = async.EventLoop() + self.eventloop = eventloop or async.EventLoop() self.handlers = { 'read': [], 'write': [], 'error': [] } self.send_queue = collections.deque() @@ -226,7 +226,7 @@ class Connection: def setup_handlers(self): if not self.connected: return - + self.remove_handlers() with self.socket_lock: self.eventloop.on_read(self.socket.fileno(), self._on_read) diff --git a/pydle/features/tls.py b/pydle/features/tls.py index 5c9a240..c6502ef 100644 --- a/pydle/features/tls.py +++ b/pydle/features/tls.py @@ -30,7 +30,7 @@ class TLSSupport(rfc1459.RFC1459Support): port = rfc1459.protocol.DEFAULT_PORT return super().connect(hostname, port, tls=tls, **kwargs) - def _connect(self, hostname, port, reconnect=False, password=None, encoding=pydle.protocol.DEFAULT_ENCODING, channels=[], tls=False, tls_verify=False, source_address=None): + def _connect(self, hostname, port, reconnect=False, password=None, encoding=pydle.protocol.DEFAULT_ENCODING, channels=[], tls=False, tls_verify=False, source_address=None, eventloop=None): """ Connect to IRC server, optionally over TLS. """ self.password = password if not reconnect: @@ -43,7 +43,8 @@ class TLSSupport(rfc1459.RFC1459Support): tls=tls, tls_verify=tls_verify, tls_certificate_file=self.tls_client_cert, tls_certificate_keyfile=self.tls_client_cert_key, - tls_certificate_password=self.tls_client_cert_password) + tls_certificate_password=self.tls_client_cert_password, + eventloop=eventloop) self.encoding = encoding # Connect.