self.devices[terminal_id] = IoTDevice(terminal_id, 'mpd') elif terminal_id in self.devices: self.devices = {} time.sleep(20) def terminal_connected(self, terminal_id): eftapi.EFT_QueryStatus(self.mpd_session) eftapi.EFT_Complete(self.mpd_session, 1) # Needed to read messages from driver device_status = ctypes.c_long() eftapi.EFT_GetDeviceStatusCode(self.mpd_session, ctypes.byref(device_status)) return device_status.value in [0, 1] conn = cups_connection() PPDs = conn.getPPDs() printers = conn.getPrinters() cups_lock = Lock() # We can only make one call to Cups at a time mpdm = MPDManager() terminal_id = helpers.read_file_first_line('odoo-six-payment-terminal.conf') if terminal_id: try: subprocess.check_output(["pidof", "eftdvs"]) # Check if MPD server is running except subprocess.CalledProcessError: subprocess.Popen(["eftdvs", "/ConfigDir", "/usr/share/eftdvs/"]) # Start MPD server eftapi = ctypes.CDLL("eftapi.so") # Library given by Six mpdm.daemon = True
dm.run() class SocketManager(Thread): def run(self): while True: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('', 9000)) sock.listen(1) dev, addr = sock.accept() if addr and addr[0] not in socket_devices: iot_device = IoTDevice(type('', (), {'dev': dev}), 'socket') socket_devices[addr[0]] = iot_device conn = cups_connection() PPDs = conn.getPPDs() printers = conn.getPrinters() m = Manager() m.daemon = True m.start() bm = BtManager() bm.daemon = True bm.start() sm = SocketManager() sm.daemon = True sm.start()