message filter calls listener
This commit is contained in:
@@ -1,20 +1,23 @@
|
||||
from urllib.parse import to_bytes
|
||||
|
||||
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_msg_type = []
|
||||
|
||||
def filter_by_msg_type(self, msg_type: str):
|
||||
self.filters_msg_type.append(msg_type)
|
||||
self.filters = []
|
||||
|
||||
def on_recv(self, msg: MsgContainer):
|
||||
data = msg.data.decode(encoding="utf-8")
|
||||
for pattern in self.filters_msg_type:
|
||||
if re.match(pattern, data):
|
||||
print(f"{self}: on_receive: {msg}")
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user