예제 #1
0
파일: processIA.py 프로젝트: furmi/simu2014
class ProcessIA():
	"""
	Classe qui va lancer une IA en subprocess.
	"""
	def __init__(self, liste_robots):
		self.__bigrobot = liste_robots[0]
		self.__minirobot = liste_robots[1]
		self.__robots = liste_robots
		self.__hokuyo = Hokuyo(self.__robots)
		self.__communication = Communication(self.__bigrobot, self.__minirobot, self.__hokuyo)
		#communication de data entre l'IA et le simu
		self.__parent_conn, self.__child_conn = Pipe()
		#TODO lancer l'IA
		self.__process = Process(target=test.testIa, args=(self.__child_conn,))
		self.__process.start()
		#on démarre le thread de lecture des données IA renvoyées à travers le pipe
		self.__read_thread = threading.Thread(target=self.__readPipe)
		self.__read_thread.start()
		#on démarre le thread d'écriture des données IA à envoyer à travers le pipe
		self.__write_thread = threading.Thread(target=self.__writePipe)
		self.__write_thread.start()

	def __writePipe(self):
		"""
		Envoie des données à l'IA à travers le Pipe
		Tourne dans un thread
		"""
		while True:
			data = self.__communication.readOrdersAPI()
			if data != -1:
				self.__parent_conn(data)

	def __readPipe(self):
		"""
		Méthode de lecture des données envoyées par l'IA via le pipe.
		recv est bloquant, donc lancé dans un thread
		"""
		while True:
			self.__parseDataIa(self.__parent_conn.recv())

	def __parseDataIa(self, data):
		"""
		Formate les données IA reçues pour les adapter à la méthode
		sendOrderAPI de Communication
		"""
		self.__communication.sendOrderAPI(data[0],data[1],data[2],data[3],data[4])