X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=loctrkd%2Fzmsg.py;h=da0dc77e39da6f38d7eaefe5adbdfe897f928b28;hb=f55e1a18723a3b3aca34e9a4b8b878860f951e52;hp=ae469a23b6afe416ac9a1cc6f8e9abe25b2ab022;hpb=63a086cf3956b93f760b1a0344afd757e0d0392f;p=loctrkd.git diff --git a/loctrkd/zmsg.py b/loctrkd/zmsg.py index ae469a2..da0dc77 100644 --- a/loctrkd/zmsg.py +++ b/loctrkd/zmsg.py @@ -4,7 +4,7 @@ import ipaddress as ip from struct import pack, unpack from typing import Any, cast, Optional, Tuple, Type, Union -__all__ = "Bcast", "Resp", "topic" +__all__ = "Bcast", "Resp", "topic", "rtopic" def pack_peer( # 18 bytes @@ -100,6 +100,10 @@ def topic( ) +def rtopic(imei: str) -> bytes: + return pack("16s", imei.encode()) + + class Bcast(_Zmsg): """Zmq message to broadcast what was received from the terminal""" @@ -166,3 +170,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()