X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=loctrkd%2Fcollector.py;h=788cb11ca1ee8b186838ea1ef882a5b6faf4ea83;hb=f55e1a18723a3b3aca34e9a4b8b878860f951e52;hp=6fc606a14ecabcbe41c6aba94c69ca7ce5bc55f4;hpb=1f1c34f9f42911958be5b282bd9092c1ed3de2a5;p=loctrkd.git diff --git a/loctrkd/collector.py b/loctrkd/collector.py index 6fc606a..788cb11 100644 --- a/loctrkd/collector.py +++ b/loctrkd/collector.py @@ -14,10 +14,11 @@ from socket import ( ) from struct import pack from time import time -from typing import Any, cast, Dict, List, Optional, Set, Tuple, Union +from typing import Any, Dict, List, Optional, Set, Tuple, Union import zmq from . import common +from .protomodule import ProtoModule from .zmsg import Bcast, Resp log = getLogger("loctrkd/collector") @@ -25,46 +26,6 @@ log = getLogger("loctrkd/collector") MAXBUFFER: int = 4096 -class ProtoModule: - class Stream: - def recv(self, segment: bytes) -> List[Union[bytes, str]]: - ... - - def close(self) -> bytes: - ... - - @staticmethod - def enframe(buffer: bytes, imei: Optional[str] = None) -> bytes: - ... - - @staticmethod - def probe_buffer(buffer: bytes) -> bool: - ... - - @staticmethod - def parse_message(packet: bytes, is_incoming: bool = True) -> Any: - ... - - @staticmethod - def inline_response(packet: bytes) -> Optional[bytes]: - ... - - @staticmethod - def is_goodbye_packet(packet: bytes) -> bool: - ... - - @staticmethod - def imei_from_packet(packet: bytes) -> Optional[str]: - ... - - @staticmethod - def proto_of_message(packet: bytes) -> str: - ... - - -pmods: List[ProtoModule] = [] - - class Client: """Connected socket to the terminal plus buffer and metadata""" @@ -107,11 +68,9 @@ class Client: ) return None if self.stream is None: - for pmod in pmods: - if pmod.probe_buffer(segment): - self.pmod = pmod - self.stream = pmod.Stream() - break + self.pmod = common.probe_pmod(segment) + if self.pmod is not None: + self.stream = self.pmod.Stream() if self.stream is None: log.info( "unrecognizable %d bytes of data %s from fd %d", @@ -217,11 +176,6 @@ class Clients: def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: - global pmods - pmods = [ - cast(ProtoModule, import_module("." + modnm, __package__)) - for modnm in conf.get("collector", "protocols").split(",") - ] # Is this https://github.com/zeromq/pyzmq/issues/1627 still not fixed?! zctx = zmq.Context() # type: ignore zpub = zctx.socket(zmq.PUB) # type: ignore