def set_writer(self, fd, on_writable): """Implement :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_writer()`. """ LOGGER.debug('SelectorIOServicesAdapter.set_writer(%s, %r)', fd, on_writable) check_fd_arg(fd) check_callback_arg(on_writable, 'on_writable') try: callbacks = self._watchers[fd] except KeyError: self._loop.add_handler(fd, self._on_reader_writer_fd_events, self._writable_mask) self._watchers[fd] = _FileDescriptorCallbacks(writer=on_writable) LOGGER.debug('set_writer(%s, _) added handler Wr', fd) else: if callbacks.writer is None: assert callbacks.reader is not None # NOTE: Set the writer func before setting the mask! # Otherwise a race condition can occur where ioloop tries to # call writer when it is still None. callbacks.writer = on_writable self._loop.update_handler( fd, self._readable_mask | self._writable_mask) LOGGER.debug('set_writer(%s, _) updated handler RdWr', fd) else: LOGGER.debug('set_writer(%s, _) replacing writer', fd) callbacks.writer = on_writable
def remove_writer(self, fd): """Implement :py:meth:`.nbio_interface.AbstractFileDescriptorServices.remove_writer()`. """ LOGGER.debug('SelectorIOServicesAdapter.remove_writer(%s)', fd) check_fd_arg(fd) try: callbacks = self._watchers[fd] except KeyError: LOGGER.debug('remove_writer(%s) neither was set.', fd) return False if callbacks.writer is None: assert callbacks.reader is not None LOGGER.debug('remove_writer(%s) writer wasn\'t set Rd', fd) return False callbacks.writer = None if callbacks.reader is None: del self._watchers[fd] self._loop.remove_handler(fd) LOGGER.debug('remove_writer(%s) removed handler', fd) else: self._loop.update_handler(fd, self._readable_mask) LOGGER.debug('remove_writer(%s) updated handler Rd', fd) return True
def set_reader(self, fd, on_readable): """Implement :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_reader()`. """ LOGGER.debug('SelectorIOServicesAdapter.set_reader(%s, %r)', fd, on_readable) check_fd_arg(fd) check_callback_arg(on_readable, 'on_readable') try: callbacks = self._watchers[fd] except KeyError: self._loop.add_handler(fd, self._on_reader_writer_fd_events, self._readable_mask) self._watchers[fd] = _FileDescriptorCallbacks(reader=on_readable) LOGGER.debug('set_reader(%s, _) added handler Rd', fd) else: if callbacks.reader is None: assert callbacks.writer is not None self._loop.update_handler( fd, self._readable_mask | self._writable_mask) LOGGER.debug('set_reader(%s, _) updated handler RdWr', fd) else: LOGGER.debug('set_reader(%s, _) replacing reader', fd) callbacks.reader = on_readable
def set_writer(self, fd, on_writable): """Implement :py:meth:`.nbio_interface.AbstractFileDescriptorServices.set_writer()`. """ LOGGER.debug('SelectorIOServicesAdapter.set_writer(%s, %r)', fd, on_writable) check_fd_arg(fd) check_callback_arg(on_writable, 'on_writable') try: callbacks = self._watchers[fd] except KeyError: self._loop.add_handler(fd, self._on_reader_writer_fd_events, self._writable_mask) self._watchers[fd] = _FileDescriptorCallbacks(writer=on_writable) LOGGER.debug('set_writer(%s, _) added handler Wr', fd) else: if callbacks.writer is None: assert callbacks.reader is not None self._loop.update_handler( fd, self._readable_mask | self._writable_mask) LOGGER.debug('set_writer(%s, _) updated handler RdWr', fd) else: LOGGER.debug('set_writer(%s, _) replacing writer', fd) callbacks.writer = on_writable
def remove_writer(self, fd): """Implement :py:meth:`.utils.nbio_interface.AbstractFileDescriptorServices.remove_writer()`. """ LOGGER.debug('%s.remove_writer(%s)', self.__class__.__name__, fd) check_fd_arg(fd) try: descriptor = self._fd_watchers[fd] except KeyError: return False if descriptor.on_writable is None: assert descriptor.on_readable is not None, ( '_SocketReadWriteDescriptor was neither writable nor readable.' ) return False descriptor.on_writable = None self._reactor.removeWriter(descriptor) if descriptor.on_readable is None: self._fd_watchers.pop(fd) return True
def remove_reader(self, fd): """Implement :py:meth:`.utils.nbio_interface.AbstractFileDescriptorServices.remove_reader()`. """ LOGGER.debug('%s.remove_reader(%s)', self.__class__.__name__, fd) check_fd_arg(fd) try: descriptor = self._fd_watchers[fd] except KeyError: return False if descriptor.on_readable is None: assert descriptor.on_writable is not None, ( '_SocketReadWriteDescriptor was neither readable nor writable.') return False descriptor.on_readable = None self._reactor.removeReader(descriptor) if descriptor.on_writable is None: self._fd_watchers.pop(fd) return True
def set_writer(self, fd, on_writable): """Implement :py:meth:`.utils.nbio_interface.AbstractFileDescriptorServices.set_writer()`. """ LOGGER.debug('%s.set_writer(%s, %s)', self.__class__.__name__, fd, on_writable) check_fd_arg(fd) check_callback_arg(on_writable, 'on_writable') try: descriptor = self._fd_watchers[fd] except KeyError: descriptor = self._SocketReadWriteDescriptor( fd, on_writable=on_writable) self._fd_watchers[fd] = descriptor else: descriptor.on_writable = on_writable self._reactor.addWriter(descriptor)