From: Eugene Crosser Date: Mon, 18 Apr 2022 19:54:37 +0000 (+0200) Subject: make collector.py work X-Git-Tag: 0.01~56 X-Git-Url: http://www.average.org/gitweb/?p=loctrkd.git;a=commitdiff_plain;h=2c60838ac44f02802480eeca626040231014caaa make collector.py work --- diff --git a/gps303/collector.py b/gps303/collector.py index 7ffa752..345d0b9 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -9,7 +9,7 @@ import sys import zmq from .config import readconfig -from .gps303proto import handle_packet, make_response, LOGIN, set_config +from .gps303proto import parse_message, HIBERNATION, LOGIN, set_config CONF = "/etc/gps303.conf" @@ -19,7 +19,7 @@ log = getLogger("gps303/collector") class Bcast: """Zmq message to broadcast what was received from the terminal""" def __init__(self, imei, msg): - self.as_bytes = imei.encode() + msg.encode() + self.as_bytes = imei.encode() + msg.to_packet() class Resp: @@ -70,7 +70,7 @@ class Client: frameend = self.buffer.find(b"\r\n", 4) if frameend == -1: # Incomplete frame, return what we have break - msg = parse_message(self.buffer[:frameend]) + msg = parse_message(self.buffer[2:frameend]) self.buffer = self.buffer[frameend+2:] if isinstance(msg, LOGIN): self.imei = msg.imei @@ -97,7 +97,7 @@ class Clients: return fd def stop(self, fd): - clnt = by_fd[fd] + clnt = self.by_fd[fd] log.info("Stop serving fd %d (IMEI %s)", clnt.sock.fileno(), clnt.imei) clnt.close() if clnt.imei: @@ -105,13 +105,13 @@ class Clients: del self.by_fd[fd] def recv(self, fd): - clnt = by_fd[fd] + clnt = self.by_fd[fd] msgs = clnt.recv() result = [] for msg in msgs: if isinstance(msg, LOGIN): self.by_imei[clnt.imei] = clnt - result.append(clnt.imei, msg) + result.append((clnt.imei, msg)) return result def response(self, resp): @@ -149,23 +149,23 @@ def runserver(opts, conf): except zmq.Again: break elif sk == tcpfd: - clntsock, clntaddr = ctlsock.accept() + clntsock, clntaddr = tcpl.accept() topoll.append((clntsock, clntaddr)) else: - imei, msg = clients.recv(sk) - zpub.send(Bcast(imei, msg).as_bytes) - if msg is None or isinstance(msg, HIBERNATION): - log.debug("HIBERNATION from fd %d", sk) - tostop.append(sk) + for imei, msg in clients.recv(sk): + zpub.send(Bcast(imei, msg).as_bytes) + if msg is None or isinstance(msg, HIBERNATION): + log.debug("HIBERNATION from fd %d", sk) + tostop.append(sk) # poll queue consumed, make changes now for fd in tostop: + poller.unregister(fd) clients.stop(fd) - pollset.unregister(fd) for zmsg in tosend: clients.response(zmsg) for clntsock, clntaddr in topoll: fd = clients.add(clntsock, clntaddr) - pollset.register(fd) + poller.register(fd) except KeyboardInterrupt: pass diff --git a/gps303/gps303proto.py b/gps303/gps303proto.py index e74a6b7..1280fe1 100755 --- a/gps303/gps303proto.py +++ b/gps303/gps303proto.py @@ -405,7 +405,6 @@ def make_object(length, proto, payload): def parse_message(packet): - print("packet w/o frame", packet.hex()) length, proto = unpack("BB", packet[:2]) payload = packet[2:] adjust = 2 if proto == STATUS.PROTO else 4 # Weird special case @@ -426,7 +425,6 @@ def parse_message(packet): def handle_packet(packet): # DEPRECATED - print("packet in frame", packet.hex()) if len(packet) < 6 or packet[:2] != b"xx" or packet[-2:] != b"\r\n": return UNKNOWN.from_packet(len(packet), packet) return parse_message(packet[2:-2])