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 )
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 )
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 )
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 )