X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=gps303%2Fcollector.py;h=385285494d7f0782bfc3c8ab20eff1ece22bbf7e;hb=f85690956cf13e342ac02dea298fe876c4163c95;hp=68c95bfb77d0ddbb75e8da64d25f6972d7e94847;hpb=4c173a5448990cd4da398be1bf3479bef17b1048;p=loctrkd.git diff --git a/gps303/collector.py b/gps303/collector.py index 68c95bf..3852854 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -1,15 +1,19 @@ """ TCP server that communicates with terminals """ -from getopt import getopt from logging import getLogger -from logging.handlers import SysLogHandler from socket import socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR from time import time from struct import pack import zmq from . import common -from .gps303proto import HIBERNATION, LOGIN, parse_message, proto_of_message +from .gps303proto import ( + HIBERNATION, + LOGIN, + inline_response, + parse_message, + proto_of_message, +) log = getLogger("gps303/collector") @@ -180,18 +184,27 @@ def runserver(conf): clntsock, clntaddr = tcpl.accept() topoll.append((clntsock, clntaddr)) else: - for imei, msg in clients.recv(sk): - zpub.send(Bcast(imei, msg).as_bytes) - if ( - msg is None - or proto_of_message(msg) == HIBERNATION.PROTO - ): - log.debug( - "HIBERNATION from fd %d (IMEI %s)", sk, imei - ) - tostop.append(sk) - elif proto_of_message(msg) == LOGIN.PROTO: - clients.response(Resp(imei=imei, payload=LOGIN.response())) + received = clients.recv(sk) + if received is None: + log.debug( + "Terminal gone from fd %d (IMEI %s)", sk, imei + ) + tostop.append(sk) + else: + for imei, msg in received: + zpub.send(Bcast(imei, msg).as_bytes) + if proto_of_message(msg) == HIBERNATION.PROTO: + log.debug( + "HIBERNATION from fd %d (IMEI %s)", + sk, + imei, + ) + tostop.append(sk) + respmsg = inline_response(msg) + if respmsg is not None: + clients.response( + Resp(imei=imei, payload=respmsg) + ) # poll queue consumed, make changes now for fd in tostop: poller.unregister(fd)