2017-12-18 22:40:56 +01:00
|
|
|
import logging
|
2017-12-22 02:11:56 +01:00
|
|
|
import threading
|
2017-12-18 22:40:56 +01:00
|
|
|
|
2017-12-18 01:10:51 +01:00
|
|
|
from queue import Queue
|
|
|
|
|
2017-12-22 02:11:56 +01:00
|
|
|
from platypush.config import Config
|
2017-12-20 20:25:08 +01:00
|
|
|
from platypush.message.event import Event, StopEvent
|
|
|
|
|
2018-06-06 20:09:18 +02:00
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
2017-12-18 01:10:51 +01:00
|
|
|
class Bus(object):
|
|
|
|
""" Main local bus where the daemon will listen for new messages """
|
|
|
|
|
2017-12-20 20:25:08 +01:00
|
|
|
def __init__(self, on_message=None):
|
2017-12-18 01:10:51 +01:00
|
|
|
self.bus = Queue()
|
2017-12-20 20:25:08 +01:00
|
|
|
self.on_message = on_message
|
2017-12-22 02:11:56 +01:00
|
|
|
self.thread_id = threading.get_ident()
|
2017-12-18 01:10:51 +01:00
|
|
|
|
|
|
|
def post(self, msg):
|
|
|
|
""" Sends a message to the bus """
|
|
|
|
self.bus.put(msg)
|
|
|
|
|
2017-12-18 22:40:56 +01:00
|
|
|
def get(self):
|
|
|
|
""" Reads one message from the bus """
|
|
|
|
return self.bus.get()
|
|
|
|
|
2017-12-22 02:11:56 +01:00
|
|
|
def stop(self):
|
|
|
|
""" Stops the bus by sending a STOP event """
|
|
|
|
evt = StopEvent(target=Config.get('device_id'),
|
|
|
|
origin=Config.get('device_id'),
|
|
|
|
thread_id=self.thread_id)
|
|
|
|
|
2018-09-20 09:41:19 +02:00
|
|
|
self.post(evt)
|
2017-12-22 02:11:56 +01:00
|
|
|
|
2017-12-20 20:25:08 +01:00
|
|
|
def poll(self):
|
|
|
|
"""
|
|
|
|
Reads messages from the bus until either stop event message or KeyboardInterrupt
|
|
|
|
"""
|
|
|
|
|
|
|
|
if not self.on_message:
|
2018-06-06 20:09:18 +02:00
|
|
|
logger.warning('No message handlers installed, cannot poll')
|
2017-12-20 20:25:08 +01:00
|
|
|
return
|
|
|
|
|
|
|
|
stop=False
|
|
|
|
while not stop:
|
|
|
|
msg = self.get()
|
|
|
|
self.on_message(msg)
|
|
|
|
|
|
|
|
if isinstance(msg, StopEvent) and msg.targets_me():
|
2018-06-06 20:09:18 +02:00
|
|
|
logger.info('Received STOP event on the bus')
|
2017-12-20 20:25:08 +01:00
|
|
|
stop=True
|
|
|
|
|
2017-12-18 01:10:51 +01:00
|
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|
|
|
|
|