X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=loctrkd%2Fzmsg.py;h=4da88d2f6754e7e78db97ef8ecc9e989dcd1475c;hb=b965fecb08f4149f6f91770e9d6bb6d79f53f11e;hp=b6faa7025a1df310422e6e51603878d9c01254b1;hpb=dbdf9d63af31770ad57302e16b17a2fdc526773f;p=loctrkd.git diff --git a/loctrkd/zmsg.py b/loctrkd/zmsg.py index b6faa70..4da88d2 100644 --- a/loctrkd/zmsg.py +++ b/loctrkd/zmsg.py @@ -131,7 +131,7 @@ class Bcast(_Zmsg): def decode(self, buffer: bytes) -> None: is_incoming, proto, imei, when = unpack("!B16s16sd", buffer[:41]) self.is_incoming = bool(is_incoming) - self.proto = proto.decode() + self.proto = proto.decode().rstrip("\0") self.imei = ( None if imei == b"0000000000000000" else imei.decode().strip("\0") ) @@ -166,3 +166,28 @@ class Resp(_Zmsg): self.when = when self.packet = buffer[24:] + + +class Rept(_Zmsg): + """Broadcast Zzmq message with "rectified" proto-agnostic json data""" + + KWARGS = (("imei", None), ("payload", "")) + + @property + def packed(self) -> bytes: + return ( + pack( + "16s", + "0000000000000000" + if self.imei is None + else self.imei.encode(), + ) + + self.payload.encode() + ) + + def decode(self, buffer: bytes) -> None: + imei = buffer[:16] + self.imei = ( + None if imei == b"0000000000000000" else imei.decode().strip("\0") + ) + self.payload = buffer[16:].decode()