68 lines
2.0 KiB
Python
68 lines
2.0 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
|
|
logger.info("Acceso manager")
|
|
printer_map['queue_command'] = q_comm
|
|
while True:
|
|
try:
|
|
comando = q_comm.get(block=True)
|
|
cmd = comando['name']
|
|
par = comando['parameters']
|
|
logger.info(f"Arrivato comando {cmd}")
|
|
if cmd == "CONNETTI":
|
|
logger.info(f"Connetto a {par['ip']}:{par['port']}")
|
|
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[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
|
|
|