コード例 #1
0
    def notify( event, srcObj = None, *args, **kwargs ):
        """
        Send an event to the parent.
        """
        self = Dispatcher.getInstance()

        if not event:
            raise Exception( 'Must specify an event.' )

        if srcObj is None:
            srcObj = getCaller()

        srcNode = self._getNode( srcObj )

        from carbon.helpers import curry

        for dstNode in srcNode.listeners:
            self._send( event, srcNode, dstNode, queued=True, *args, **kwargs )
コード例 #2
0
    def queue( event, srcObj, dstObj, *args, **kwargs ):
        """
        Send an event to a dstObj object.
        The event will always be queued and processed later.
        """
        self = Dispatcher.getInstance()

        self.log.debug( 'Queue event, ' + str(event()) + '.' )

        if not event:
            raise Exception( 'Must specify an event.' )

        if srcObj is None:
            srcObj = getCaller()

        srcNode = self._getNode( srcObj )
        dstNode = self._getNode( dstObj )

        return self._send( event, srcNode, dstNode, queued = True, *args, **kwargs )
コード例 #3
0
    def send( event, srcObj, dstObj, *args, **kwargs ):
        """
        Send an event to a dstObj object.
        If the dstObj object is in the same context, the event will be processed right away.
        Otherwise, the event will be queued and processed later.
        """
        self = Dispatcher.getInstance()

        self.log.debug( 'Send event, ' + str(event()) + '.' )

        if not event:
            raise Exception( 'Must specify an event.' )

        if srcObj is None:
            srcObj = getCaller()

        srcNode = self._getNode( srcObj )
        dstNode = self._getNode( dstObj )

        return self._send( event, srcNode, dstNode, queued = False, *args, **kwargs )
コード例 #4
0
    def schedule( seconds, event, srcObj, dstObj, *args, **kwargs ):
        """
        Schedule an event to be sent to a dstObj.
        The event will always be queued.
        Returns a Timer object for the event.  The Timer object can be used to cancel the event.
        """
        self = Dispatcher.getInstance()

        self.log.debug( 'Schedule event, ' + str(event()) + ', for ' + str(seconds) + ' seconds.' )

        if not event:
            raise Exception( 'Must specify an event.' )

        if srcObj is None:
            srcObj = getCaller()

        srcNode = self._getNode( srcObj )
        dstNode = self._getNode( dstObj )

        if not dstNode.context:
            raise TypeError( 'This destination node does not have a context.' )

        return dstNode.context.schedule( seconds, event, srcNode.obj, dstNode.obj, *args, **kwargs )