Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class RequestHandler(SocketServer.BaseRequestHandler):
- def __init__(self, request, client_address, server):
- self.logger = glogger #logging.getLogger('Handler')
- self.logger.debug('New request')
- SocketServer.BaseRequestHandler.__init__(self, request, client_address, server)
- return
- def handle(self):
- self.server.socket.setblocking(0)
- #self.server.socket.settimeout(10.0)
- cur_pid = os.getpid() #threading.current_thread().
- self.logger.info("handle start, pid: "+str(cur_pid))
- self.loop = True
- self.counts = 120
- self.counter = self.counts
- self.last = time.time()
- self.pid = str(cur_pid)
- self.imei = "PID: "+self.pid #until we get the real one
- self.lat = 0
- self.lon = 0
- self.spd = 0
- self.bearing = 0
- self.acc = 0
- self.pos = None
- self.bytes_r = 0
- self.bytes_s = 0
- self.posidx = 0 # number of positions received
- self.poshandler = None
- #
- # LOOP
- #
- while self.loop:
- sdata = ""
- try:
- sdata = self.request.recv(1024)
- if not sdata:
- self.error("Not data.")
- self.counter = 0
- else:
- self.logger.info("received raw data:" + sdata);
- except socket.error as err:
- if str(err) == "[Errno 35] Resource temporarily unavailable":
- time.sleep(0.1) #OS X bug workaround
- continue
- self.error("Socket error.")
- self.counter = 0
- if sdata == "":
- self.counter = self.counter - 1
- else:
- self.bytes_r += len(sdata)
- sdata = sdata.rstrip()
- self.debug("recv("+sdata+")")
- # Device must send imei in every request (independent of which kinf off message)
- # Check if string contains the device imei, otherwise we skip the handle
- known_device = False;
- for key, value in devices.items():
- if key in sdata:
- known_device = True;
- break;
- if known_device:
- self.logger.info("Found a known device. Handle it");
- ########################################
- ########################################
- # Store this device in a list (trackers)
- ########################################
- else:
- continue
- if __name__ == '__main__':
- import socket
- import threading
- PORT = 9000
- address = ('', PORT).
- server = Server(address, RequestHandler)
- ip, port = server.server_address.
- t = threading.Thread(target=server.serve_forever)
- t.setDaemon(True) # don't hang on exit
- t.start()
- glogger.info('Server loop running in process:'+str(os.getpid()))
- while True:
- try:
- time.sleep(1)
- ########################################
- ########################################
- # Iterate devices and remove the old ones from the array (trackers)
- ########################################
- continue
Advertisement
Add Comment
Please, Sign In to add comment