示例#1
0
文件: core.py 项目: antiglue/codebase
class MockConnector(Connector):
    """
    Mock Connector
    """
    def __init__(self, cid, params, encoder):
        Connector.__init__(self, cid, encoder)
        self.params = params
        self.connected = True
        self.dispatcher = EventDispatcher()
        self.sent = 0

    def add_listener(self, listener):
        self.dispatcher.attach_listener(listener)

    def send(self, destination, message, headers = None, ack = 'client'):
        self.sent += 1
        msg = {'headers': headers,
               'message': message}
        self.dispatcher.fire(MessageEvent(**msg))
        self.dispatcher.fire(MessageProcessedEvent(**msg))

    def unsubscribe(self, destination):
        pass

    def subscribe(self, destination, params = None, ack = 'client'):
        pass    
示例#2
0
文件: core.py 项目: antiglue/codebase
class TestFileConnector(Connector):
    """
    Implements reading and writing of messages to files
    """
    def __init__(self, cid, amqparams, encoder):
        Connector.__init__(self, cid, encoder)
        self.basepath = amqparams['basepath']
        self.dispatcher = EventDispatcher()
        self.readerthread = None

    def add_listener(self, listener):
        self.dispatcher.attach_listener(listener)

    def send(self, destination, message, headers = None, ack = 'client'):
        try:
            headers = headers or {}
            headers['id'] = self.cid
            headers['message-id'] = '%s_%d'% (self.cid, random.randrange(20000))
            destination = destination[1:] if destination[0] == '/' \
                                        else destination
            outfp = open(os.path.join(self.basepath, destination), 'a')
            message, headers = self.encoder.encode(message, headers)
            outfp.write('%s\n' % json.dumps({'headers': headers, 
                                             'message':message}))
            outfp.close()
        except IOError, ex:
            trace = sys.exc_info()[2]
            raise ConnectionError('Connection failed!'), None, trace
        except Exception, ex:
            trace = sys.exc_info()[2]
            raise ConnectionError('Connection failed!'), None, trace
示例#3
0
文件: core.py 项目: averni/pampas
    class AMQListener(stomp.ConnectionListener):
        """
        Stomp bridging layer: fires received messages as events
        """

        DEBUG_MESSAGE = False
        def __init__(self, connection, encoder):
            super(AMQStompConnector.AMQListener, self).__init__()
            self.connection = connection
            self.encoder = encoder
            self.dispatcher = EventDispatcher()
            self.messagelock = threading.Lock()
        
        def attach_listener(self, listener):
            self.dispatcher.attach_listener(listener)

        def on_error(self, headers, message):
            logger.warning('received an error %s H: %s' % (message, str(headers)))
            self.dispatcher.fire(AmqErrorEvent(headers=headers, 
                                               message=message)) 

        def on_receipt(self, headers, message):
            logger.debug("RECEIPT %s %s" % (headers, message))

        def on_disconnected(self):
            logger.warning("Catched disconnection")
            self.dispatcher.fire(AmqDisconnectedEvent()) 

        def on_message(self, headers, message):
            message, headers = self.encoder.decode(message, headers)
            logger.debug("Received: %s" % str((headers, message)))
            with self.messagelock:
                event = MessageEvent
                if COMMAND_HEADER in headers:
                    logger.debug('Got %s COMMAND' % message)
                    event = globals().get(headers[COMMAND_HEADER], None)
                    assert event

                if self.DEBUG_MESSAGE and logger.isEnabledFor(logging.DEBUG):
                    logger.debug("Received message:")
                    for key, val in headers.iteritems():
                        logger.debug('header: key %s , value %s' %(key, val))
                    logger.debug('body: %s'% message)

                logger.debug("Firing event: %s" % str(event))
                if 'buffersize' in headers:
                    for msg in pickle.loads(message):
                        self.dispatcher.fire(event(headers=headers, message=msg))
                else:
                    self.dispatcher.fire(event(headers=headers, message=message))

                self.dispatcher.fire(MessageProcessedEvent(headers=headers, message=message))