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