class RcvThread(threading.Thread): """A tread class that receives readings over the network""" def __init__(self, cli_sock, node_name): threading.Thread.__init__(self) self.cli_sock = cli_sock self.node_name = node_name self.db_hdlr = DatabaseHandler('measurements.db') self.alive = True def run(self): # Keep the receive streaming socket open fd = self.cli_sock.fileno() while self.alive: # Check if there is something to read on the socket # or if the socket has thrown exceptions for 20s rlist, wlist, xlist = select.select( [fd], [], [fd], 5) if xlist: break if rlist: # Receive data on the socket data = self.cli_sock.recv(7).strip() tag_id = data[:4] rss = data[4:] self.db_hdlr.ins_reading(self.node_name, tag_id, rss) #print data, len(data), self.node_name # Close this client socket self.cli_sock.close() self.db_hdlr.close_db(); def stop(self): self.alive = False def get_node_name(self): return self.node_name
class Main: """A class for establishing connections""" def start_db_hdlr(self, db): self.db_hdlr = DatabaseHandler(db) self.db_hdlr.flush_rss_readings() self.db_hdlr.check_pos_tbl() self.db_hdlr.check_rsl_tbl() def start_net_srv(self): self.net_srv = NetworkServer() self.net_srv.start() def start_serial_conn(self, port, timeout): self.serial_conn = SerialConnection(port, timeout) self.serial_conn.open() self.serial_conn.flush_input() def start_trilat(self): self.trilat = Trilateration() self.trilat.start() def run(self): try: while True: data = self.serial_conn.read().strip() tag_id = data[:4] rss = data[4:] self.db_hdlr.ins_reading(2, tag_id, rss) except KeyboardInterrupt: self.db_hdlr.close_db() self.net_srv.stop() self.net_srv.join(60) self.trilat.stop() self.trilat.join(20) self.serial_conn.close()