message filter calls listener
This commit is contained in:
+3
-3
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
class MsgContainer:
|
class MsgContainer:
|
||||||
def __init__(self, name: str, timestamp: float = 0, data: bytes = b''):
|
def __init__(self, name: str, timestamp: float = 0, data: bytes = b''):
|
||||||
self.name : str= name
|
|
||||||
self.timestamp : float = timestamp
|
self.timestamp : float = timestamp
|
||||||
|
self.name : str= name
|
||||||
self.data: bytes = data
|
self.data: bytes = data
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name}: {self.timestamp}: {self.data}"
|
return f"{self.timestamp}:{self.name}:{self.data}"
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"{self.name}: {self.timestamp}: {self.data}"
|
return f"{self.timestamp}:{self.name}:{self.data}"
|
||||||
|
|||||||
+7
-2
@@ -62,6 +62,11 @@ class MultiClient(MsgSource):
|
|||||||
finally:
|
finally:
|
||||||
self.sel.close()
|
self.sel.close()
|
||||||
|
|
||||||
|
def GPGSV_callback(msg: MsgContainer):
|
||||||
|
print(f"GPGSV_callback: {msg}")
|
||||||
|
|
||||||
|
def GNGLL_callback(msg: MsgContainer):
|
||||||
|
print(f"GNGLL_callback: {msg}")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
server_list = [
|
server_list = [
|
||||||
@@ -75,8 +80,8 @@ if __name__ == "__main__":
|
|||||||
# NMEA multi source receiver
|
# NMEA multi source receiver
|
||||||
receiver = NmeaReceiver()
|
receiver = NmeaReceiver()
|
||||||
# receiver.filter_by_msg_type('.*')
|
# receiver.filter_by_msg_type('.*')
|
||||||
receiver.filter_by_msg_type('^.?GPGSV.*')
|
receiver.register_msg('^.?GPGSV.*', GPGSV_callback)
|
||||||
receiver.filter_by_msg_type('^.?GNGLL.*')
|
receiver.register_msg('^.?GNGLL.*', GNGLL_callback)
|
||||||
|
|
||||||
# Packetizer for "zed-x20p"
|
# Packetizer for "zed-x20p"
|
||||||
packetizer_0 = Packetizer()
|
packetizer_0 = Packetizer()
|
||||||
|
|||||||
@@ -1,20 +1,23 @@
|
|||||||
from urllib.parse import to_bytes
|
|
||||||
|
|
||||||
from msg_montainer import MsgContainer
|
from msg_montainer import MsgContainer
|
||||||
from msg_sink import MsgSink
|
from msg_sink import MsgSink
|
||||||
|
from typing import Callable
|
||||||
import re
|
import re
|
||||||
|
|
||||||
class NmeaReceiver(MsgSink):
|
class NmeaReceiver(MsgSink):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
MsgSink.__init__(self)
|
MsgSink.__init__(self)
|
||||||
self.filters_msg_type = []
|
self.filters = []
|
||||||
|
|
||||||
def filter_by_msg_type(self, msg_type: str):
|
|
||||||
self.filters_msg_type.append(msg_type)
|
|
||||||
|
|
||||||
def on_recv(self, msg: MsgContainer):
|
def on_recv(self, msg: MsgContainer):
|
||||||
data = msg.data.decode(encoding="utf-8")
|
data = msg.data.decode(encoding="utf-8")
|
||||||
for pattern in self.filters_msg_type:
|
for filter in self.filters:
|
||||||
if re.match(pattern, data):
|
if re.match(filter['re'], data):
|
||||||
print(f"{self}: on_receive: {msg}")
|
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