from msg_montainer import MsgContainer from msg_sink import MsgSink from typing import Callable import re class NmeaReceiver(MsgSink): def __init__(self): MsgSink.__init__(self) self.filters = [] def on_recv(self, msg: MsgContainer): data = msg.data.decode(encoding="utf-8") for filter in self.filters: if re.match(filter['re'], data): if filter['listener'] is not None: filter['listener'](msg) def register_msg(self, msg_type: str, listener: Callable): self.filters.append({'re': msg_type, 'listener': listener}) def _filter_by_msg_type(self, msg_type: str): self.filters.append(msg_type)