def __init__(self): self.log = logging.getLogger("snakemq.link") self.reconnect_interval = RECONNECT_INTERVAL #: in seconds self.recv_block_size = RECV_BLOCK_SIZE #{ callbacks self.on_connect = Callback() #: ``func(conn_id)`` self.on_disconnect = Callback() #: ``func(conn_id)`` #: ``func(conn_id, data)`` self.on_recv = Callback() #: ``func(conn_id, last_send_size)``, last send was successful self.on_ready_to_send = Callback() #: ``func()``, called after poll is processed self.on_loop_pass = Callback() #} self._do_loop = False #: False breaks the loop self._new_conn_id = 0 #: counter for conn id generator self.poller = poll() self._poll_bell = Bell() self.log.debug("poll bell %r" % self._poll_bell) self.poller.register(self._poll_bell.r, select.EPOLLIN) # read part self._sock_by_fd = {} self._sock_by_conn = {} self._listen_socks = {} #: address:sock self._listen_socks_filenos = set() self._connectors = {} #: address:sock self._socks_waiting_to_connect = set() self._plannned_connections = [] #: (when, address) self._reconnect_intervals = {} #: address:interval self._in_ssl_handshake = set() #: set of LinkSocket