class Listener(object): '''PyTroll listener class for reading messages for Trollduction ''' def __init__(self, topics=None, queue=None): '''Init Listener object ''' self.topics = topics self.queue = queue self.subscriber = None self.recv = None self.create_subscriber() self.running = False def create_subscriber(self): '''Create a subscriber instance using specified addresses and message types. ''' if self.subscriber is None: if self.topics: self.subscriber = NSSubscriber("", self.topics, addr_listener=True) self.recv = self.subscriber.start().recv def add_to_queue(self, msg): '''Add message to queue ''' self.queue.put(msg) def run(self): '''Run listener ''' self.running = True for msg in self.recv(1): if msg is None: if self.running: continue else: break self.add_to_queue(msg) def stop(self): '''Stop subscriber and delete the instance ''' self.running = False time.sleep(1) if self.subscriber is not None: self.subscriber.stop() self.subscriber = None def restart(self): '''Restart subscriber ''' self.stop() self.create_subscriber() self.run()
class MessageProcessor(Thread): """Process Messages """ def __init__(self, services, topics): Thread.__init__(self) self.nssub = NSSubscriber(services, topics, True) self.sub = None self.loop = True def start(self): self.sub = self.nssub.start() Thread.start(self) def process_message(self, msg): del msg raise NotImplementedError("process_message is not implemented!") def run(self): try: for msg in self.sub.recv(2): if not self.loop: break if msg is None: continue self.process_message(msg) finally: self.stop() def stop(self): self.nssub.stop() self.loop = False
class AbstractMessageProcessor(Thread): """Process Messages """ def __init__(self, services, topics, nameserver="localhost"): Thread.__init__(self) LOG.debug("Nameserver: {}".format(nameserver)) self.nssub = NSSubscriber(services, topics, True, nameserver=nameserver) self.sub = None self.loop = True def start(self): self.sub = self.nssub.start() Thread.start(self) def process(self, msg): """Process the message. """ del msg raise NotImplementedError("process is not implemented!") def run(self): """Run the trigger. """ try: for msg in self.sub.recv(2): if not self.loop: break if msg is None: continue self.process(msg) finally: self.stop() def stop(self): """Stop the trigger. """ self.nssub.stop() self.loop = False
class Listener(object): '''PyTroll listener class for reading messages for eg. operational product generation. ''' logger = logging.getLogger("Listener") def __init__(self, topics=None, queue=None, addresses=None, nameserver="localhost", services=""): '''Init Listener object ''' self.topics = topics self.queue = queue self.services = services self.subscriber = None self.recv = None self.addresses = addresses self.nameserver = nameserver self.create_subscriber() self.running = False def create_subscriber(self): '''Create a subscriber instance using specified addresses and message types. ''' if self.subscriber is None: if self.topics: self.subscriber = NSSubscriber(self.services, self.topics, addr_listener=True, addresses=self.addresses, nameserver=self.nameserver) self.recv = self.subscriber.start().recv def add_to_queue(self, msg): '''Add message to queue ''' self.queue.put(msg) def run(self): '''Run listener ''' self.running = True for msg in self.recv(1): if msg is None: if self.running: continue else: break self.logger.debug("New message received: %s", str(msg)) self.add_to_queue(msg) def stop(self): '''Stop subscriber and delete the instance ''' self.running = False time.sleep(1) if self.subscriber is not None: self.subscriber.stop() self.subscriber = None def restart(self): '''Restart subscriber ''' self.stop() self.create_subscriber() self.run()