def _cancelHandlers(self, reason): '''Cancel all pending handlers This will call the errback of all pending handlers using `reason`. :param reason: Reason for cancelation :type reason: `twisted.python.failure.Failure` ''' if self._currentHandler: log.msg('Canceling current handler') receiver, deferred = self._currentHandler #pylint: disable=W0633 self._currentHandler = None if not deferred.called: deferred.errback(reason) utils.kill_coroutine(receiver, lambda msg: log.err(None, msg)) log.msg('Canceling %d outstanding requests' % len(self._outstanding)) while True: try: _, deferred = self._outstanding.popleft() except IndexError: break deferred.errback(reason) assert len(self._outstanding) == 0
def _handleRequest(self, data): '''Handler for `Request` values emitted by a message decoder''' if not self._currentHandler: log.msg('Request data received but no handler registered') self.transport.loseConnection() return None receiver, deferred = self._currentHandler #pylint: disable=W0633 try: request = receiver.send(data) except Exception, exc: #pylint: disable=W0703 if not isinstance(exc, errors.ArakoonError): log.err(exc, 'Exception raised by message receive loop') deferred.errback(exc) self.transport.loseConnection() return None else: deferred.errback(exc) self._currentHandler = None utils.kill_coroutine(receiver, lambda msg: log.err(None, msg)) return self.getInitialState()
def _handleResult(self, result): '''Handler for `Result` values emitted by a message decoder''' receiver, deferred = self._currentHandler #pylint: disable=W0633 self._currentHandler = None deferred.callback(result.value) # To be on the safe side... utils.kill_coroutine(receiver, lambda msg: log.err(None, msg)) return self.getInitialState()