driver_tsc/driver/tsc_manager.py

66 lines
1.9 KiB
Python

'''
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