From d6c20543cf997f20cb72bf7380674bf012a5af88 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Mon, 9 May 2022 18:27:21 +0200 Subject: [PATCH] fix zmq subscription topics --- gps303/lookaside.py | 3 +-- gps303/termconfig.py | 11 +++++------ gps303/wsgateway.py | 14 +++++++++----- gps303/zmsg.py | 21 ++++++++++++++++----- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/gps303/lookaside.py b/gps303/lookaside.py index edc899f..136ade9 100644 --- a/gps303/lookaside.py +++ b/gps303/lookaside.py @@ -18,8 +18,7 @@ def runserver(conf): zctx = zmq.Context() zsub = zctx.socket(zmq.SUB) zsub.connect(conf.get("collector", "publishurl")) - tosub = topic(WIFI_POSITIONING.PROTO) - zsub.setsockopt(zmq.SUBSCRIBE, tosub) + zsub.setsockopt(zmq.SUBSCRIBE, topic(WIFI_POSITIONING.PROTO)) zpush = zctx.socket(zmq.PUSH) zpush.connect(conf.get("collector", "listenurl")) diff --git a/gps303/termconfig.py b/gps303/termconfig.py index 9f91684..b9517f0 100644 --- a/gps303/termconfig.py +++ b/gps303/termconfig.py @@ -17,13 +17,12 @@ def runserver(conf): zctx = zmq.Context() zsub = zctx.socket(zmq.SUB) zsub.connect(conf.get("collector", "publishurl")) - for protoname in ( - "STATUS", - "SETUP", - "POSITION_UPLOAD_INTERVAL", + for proto in ( + STATUS.PROTO, + SETUP.PROTO, + POSITION_UPLOAD_INTERVAL.PROTO, ): - tosub = topic(proto_by_name(protoname)) - zsub.setsockopt(zmq.SUBSCRIBE, tosub) + zsub.setsockopt(zmq.SUBSCRIBE, topic(proto)) zpush = zctx.socket(zmq.PUSH) zpush.connect(conf.get("collector", "listenurl")) diff --git a/gps303/wsgateway.py b/gps303/wsgateway.py index 80926fb..00770eb 100644 --- a/gps303/wsgateway.py +++ b/gps303/wsgateway.py @@ -255,22 +255,23 @@ def runserver(conf): while True: neededsubs = clients.subs() for imei in neededsubs - activesubs: + log.debug("topics: %s", [tpc.hex() for tpc in [topic(GPS_POSITIONING.PROTO, True, imei), topic(WIFI_POSITIONING.PROTO, False, imei)]]) zsub.setsockopt( zmq.SUBSCRIBE, - topic(GPS_POSITIONING.PROTO, True), + topic(GPS_POSITIONING.PROTO, True, imei), ) zsub.setsockopt( zmq.SUBSCRIBE, - topic(WIFI_POSITIONING.PROTO, False), + topic(WIFI_POSITIONING.PROTO, False, imei), ) for imei in activesubs - neededsubs: zsub.setsockopt( zmq.UNSUBSCRIBE, - topic(GPS_POSITIONING.PROTO, True), + topic(GPS_POSITIONING.PROTO, True, imei), ) zsub.setsockopt( zmq.UNSUBSCRIBE, - topic(WIFI_POSITIONING.PROTO, False), + topic(WIFI_POSITIONING.PROTO, False, imei), ) activesubs = neededsubs log.debug("Subscribed to: %s", activesubs) @@ -283,7 +284,10 @@ def runserver(conf): if sk is zsub: while True: try: - zmsg = Bcast(zsub.recv(zmq.NOBLOCK)) + buf = zsub.recv(zmq.NOBLOCK) + zmsg = Bcast(buf) + log.debug("zmq packet: %s", buf.hex()) + # zmsg = Bcast(zsub.recv(zmq.NOBLOCK)) msg = parse_message(zmsg.packet) tosend.append(zmsg) log.debug("Got %s", zmsg) diff --git a/gps303/zmsg.py b/gps303/zmsg.py index 0457685..1fe1812 100644 --- a/gps303/zmsg.py +++ b/gps303/zmsg.py @@ -80,8 +80,8 @@ class _Zmsg: def topic(proto, is_incoming=True, imei=None): - return ( - pack("BB", is_incoming, proto) + b"" if imei is None else imei.encode() + return pack("BB", is_incoming, proto) + ( + b"" if imei is None else pack("16s", imei.encode()) ) @@ -100,8 +100,14 @@ class Bcast(_Zmsg): @property def packed(self): return ( - pack("BB", int(self.is_incoming), self.proto) - + ("0000000000000000" if self.imei is None else self.imei).encode() + pack( + "BB16s", + int(self.is_incoming), + self.proto, + "0000000000000000" + if self.imei is None + else self.imei.encode(), + ) + ( b"\0\0\0\0\0\0\0\0" if self.when is None @@ -130,7 +136,12 @@ class Resp(_Zmsg): @property def packed(self): return ( - ("0000000000000000" if self.imei is None else self.imei.encode()) + pack( + "16s", + "0000000000000000" + if self.imei is None + else self.imei.encode(), + ) + ( b"\0\0\0\0\0\0\0\0" if self.when is None -- 2.39.2