def __init__(self, SERVER_IP, SERVER_PORT, SCR, RECEPTION_MODE): Thread.__init__(self) self.SERVER_IP = SERVER_IP self.SERVER_PORT = SERVER_PORT self.scr = SCR self.last_entry = " none" self.erreurs = "pas d'erreurs pour le moment" self.reception_mode = RECEPTION_MODE self.logger = LogFile('app.log') self.logger.initself()
def __init__(self, SCR, arduino_port, arduino_speed, arduino_fake, ncurses): Thread.__init__(self) self.arduino_port = arduino_port self.arduino_speed = arduino_speed self.arduino_fake = arduino_fake self.logger = LogFile('app.log') self.logger.initself() self.ncurses=ncurses if self.ncurses: self.scr = SCR self.last_entry = "aucune" self.erreurs = "pas d'erreurs pour le moment"
class core(Thread): '''thread principal, gère tous les autres threads à savoir : - thread inputs - thread de calcul et gestion des données - thread outputs (graphique et audio) > contient la boucle infinie de capture de touche entrée au clavier. ''' def __init__(self, SERVER_IP, SERVER_PORT, SCR, RECEPTION_MODE): Thread.__init__(self) self.SERVER_IP = SERVER_IP self.SERVER_PORT = SERVER_PORT self.scr = SCR self.last_entry = " none" self.erreurs = "pas d'erreurs pour le moment" self.reception_mode = RECEPTION_MODE self.logger = LogFile('app.log') self.logger.initself() def run(self): self.logger.p_log('program started', newline=3) try: d_audio = daemon_audio(self.logger) self.logger.p_log('(CORE) start daemon_glove') sleep(3) d_glove = daemon_glove( core_ref=self, mode=self.reception_mode ) d_glove.start() self.d_data_manager = daemon_data( self.scr, core_ref=self, d_glove_ref=d_glove, d_audio_ref=d_audio ) self.d_data_manager.start() # Thread-2 = OBSOLETE ! self.d_curses = daemon_curses( self.scr, core_ref=self, d_glove_ref=d_glove ) self.d_curses.start() # Thread-3 = OBSOLETE ! sleep(.01) # wait, pour être sûr que les thread soient bien lancés self.d_curses.scr_init() # boucle de get_key while 1: sleep(0.1) self.scr.nodelay(1) # rend getch() non-bloquant current_entry = self.scr.getch() if 0 < current_entry < 356: # si lettre connue, on la traite # on commence par le stocker # on remplit avec des blancs pour que ça fasse tjrs 5 " " self.last_entry = current_entry if current_entry == 27: # <échap> # ord('q') break else: if current_entry == KEY_LEFT: self.last_entry = str(current_entry) except: self.logger.p_log('(CORE) ERROR in daemons init ', error=exc_info()) # FIN DU PROGRAMME, ON NETTOIE TOUT. RANGER TOUT ÇA DANS DES MÉTHODES # PROPRES À CHAQUE THREAD. en gros, "chacun chez soi" serait + cool ! #d_audio.server.stop() d_glove.kill_daemon_data_network() d_glove._Thread__stop() self.d_data_manager._Thread__stop() self.d_curses._Thread__stop() endwin() # restaure le terminal à son état d'origine self.logger.p_log('program ends.') print "traceback:" traceback.print_exc() # affiche exception si il y a
class core(Thread): '''thread principal, gère tous les autres threads à savoir : > contient la boucle infinie de capture de touche entrée au clavier. ''' def __init__(self, SCR, arduino_port, arduino_speed, arduino_fake, ncurses): Thread.__init__(self) self.arduino_port = arduino_port self.arduino_speed = arduino_speed self.arduino_fake = arduino_fake self.logger = LogFile('app.log') self.logger.initself() self.ncurses=ncurses if self.ncurses: self.scr = SCR self.last_entry = "aucune" self.erreurs = "pas d'erreurs pour le moment" def run(self): self.logger.p_log('program started', newline=3) try: # on lance le processus qui gère l'arduino self.d_arduino = daemon_arduino( core_ref=self, arduino_port=self.arduino_port, arduino_speed=self.arduino_speed, arduino_fake=self.arduino_fake ) self.d_arduino.start() # on lance le processus qui gère l'audio self.d_audio = daemon_audio( core_ref=self, ) self.d_audio.start() # on lance le processus qui gère la sfml self.d_sfml = daemon_visuels( core_ref=self, ) self.d_sfml.start() # on lance l'interface ncurses si l'utilisateur le veut if self.ncurses: self.d_curses = daemon_curses( self.scr, core_ref=self, ) self.d_curses.start() sleep(.01) # wait, pour être sûr que les thread soient bien lancés if self.ncurses: self.d_curses.scr_init() if self.ncurses: # boucle principale ncurses while 1: sleep(0.1) self.scr.nodelay(1) # rend getch() non-bloquant current_entry = self.scr.getch() if 0 < current_entry < 356: # si lettre connue, on la traite # on commence par le stocker # on remplit avec des blancs pour que ça fasse tjrs 5 " " self.last_entry = current_entry if current_entry == 27: # <échap> # ord('q') break elif current_entry == 258: self.d_arduino.data['capteur1var'] -= 10 self.last_entry = str(current_entry) elif current_entry == 259: self.d_arduino.data['capteur1var'] += 10 self.last_entry = str(current_entry) elif current_entry == ord('a'): self.d_audio.current = 0 elif current_entry == ord('z'): self.d_audio.current = 1 self.d_arduino.current = 0 elif current_entry == ord('e'): self.d_audio.current = 2 self.d_arduino.current = 1 else: foo = 42 # toutes les touches spéciales sont ici ! else: # instruction principale si ncurses est désactivé print 'press ENTER to quit' raw_input() except: self.logger.p_log('(CORE) ERROR in daemons init ', error=exc_info()) # on tue tous les processus, le plus proprement possible... self.d_audio._Thread__stop() self.d_arduino._Thread__stop() self.d_sfml._Thread__stop() if self.ncurses: self.d_curses._Thread__stop() endwin() # restaure le terminal à son état d'origine # fin du programme self.logger.p_log('program ends.') # on affiche les erreurs s'il y a print "traceback:" traceback.print_exc()