示例#1
0
文件: tx.py 项目: Incubaid/pyrakoon
    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
示例#2
0
文件: tx.py 项目: Incubaid/pyrakoon
    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()
示例#3
0
文件: tx.py 项目: Incubaid/pyrakoon
    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()