- "0000000000000000" if self.imei is None else self.imei.encode()
- ) + self.packet
-
- def decode(self, buffer):
- self.imei = buffer[:16].decode()
- self.packet = buffer[16:]
-
-
-class LocEvt(_Zmsg):
- """Zmq message with original or approximated location from lookaside"""
-
- KWARGS = (
- ("imei", "0000000000000000"),
- ("devtime", datetime(1970, 1, 1, tzinfo=timezone.utc)),
- ("lat", 0.0),
- ("lon", 0.0),
- ("is_gps", True),
- )
-
- # This message is for external consumption, so use json encoding,
- # except imei that forms 16 byte prefix that can be used as the
- # topic to subscribe.
- @property
- def packed(self):
- return (
- self.imei.encode()
- + dumps(
- {
- "devtime": str(self.devtime),
- "latitude": self.lat,
- "longitude": self.lon,
- "is-gps": self.is_gps,
- }
- ).encode()
- )
-
- # And this is full json that can be sent over websocket etc.
- @property
- def json(self):
- return dumps(
- {
- "imei": self.imei,
- "devtime": str(self.devtime),
- "latitude": self.lat,
- "longitude": self.lon,
- "is-gps": self.is_gps,
- }
+ 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
+ else pack("!d", self.when)
+ )
+ + self.packet