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
Example #2
0
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()