''' Created on 19 mar 2020 @author: Emanuele Trabattoni @copyright: Briq srl @contact: Scritto per Briq srl come collaboratore esterno, contiene dei frammenti di codice di proprieta' di Briq srl ''' import threading, sys, queue, logging from driver.tsc_printer import tsc_printer from driver.notifier import URL_EVENT, URL_RESPONSE Q_TIMEOUT = 2 printer_map={} def get_queue_id(ip): global printer_map if ip in printer_map.keys(): return printer_map[str(ip)]['queue_id'] else: return None def get_queue_command(): global printer_map return printer_map['queue_command'] #lancia i thread, uno per stampante def main(q_in :queue.Queue, q_out :queue.Queue, q_comm: queue.Queue, logger: logging.getLogger): global printer_map while True: try: comando = q_comm.get(block=True, timeout=Q_TIMEOUT) cmd = comando['name'] par = comando['parameters'] if cmd == "CONNETTI": printer_map[par['ip']] = {} # genera nuove code in ingresso per la nuova stampante q_in_prt = queue.Queue() q_cmd_prt = queue.Queue() printer_map['queue_command'] = q_comm printer_map[par['ip']]['queue_id'] = q_in_prt # aggiungi la nuova coda al dict delle code printer_map[par['ip']]['port'] = par['port'] # lancia un thread stampante con la nuova coda ingresso t_prt = threading.Thread(name = f"Stampante {par['ip']}:{par['port']}", target = tsc_printer, args = [q_in_prt, q_out, q_cmd_prt, par['ip'], par['port'], logger], daemon = True) printer_map[par['ip']]['thr'] = t_prt # aggiungi il nuovo thread al dict dei thread t_prt.start() pass elif comando['name'] == "DISCONNETTI": pass else: q_out.put({'url':URL_RESPONSE, 'msg':{'error':'comando inesistente'} }) logger.error("Comando non Trovato") except (InterruptedError, KeyboardInterrupt): logger.critical("sto quittando") pass