from .components import Component
[docs]class Listener:
def __init__(self, on_component_event=None, on_system_event=None):
self.on_component_event = on_component_event
self.on_system_event = on_system_event
[docs] def process_broadcast(self, broadcast):
if broadcast.is_component_broadcast and self.on_component_event:
component_cls = Component.component_classes()[broadcast.type]
self.on_component_event(node_cid=broadcast.source,
component_id=broadcast.component_id,
component_type=broadcast.type,
event=component_cls.parse_broadcast(broadcast))
elif not broadcast.is_component_broadcast and self.on_system_event:
# try, if a component can parse the system broadcast
component_type = broadcast.group - 0x50
component_cls = Component.component_classes().get(component_type)
if component_cls:
event = component_cls.parse_broadcast(broadcast)
if event:
self.on_system_event(node_cid=broadcast.source, event=event)