def run(self): app = Application() path = '/tmp/%s' % self.name if os.path.exists(path): os.remove(path) s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.bind(path) s.listen(1) sockets = [s.fileno()] while self.running: r, w, e = select.select(sockets, [], [], 10) if len(r) == 0: continue if s.fileno() in r: conn, addr = s.accept() self.clients.append(Socket(conn)) sockets.append(conn.fileno()) for conn in self.clients: if conn.fileno() in r: d = conn.read() if conn.connected: app.queue(self.cb, conn, d) else: sockets.remove(conn.fileno()) self.clients[:] = [x for x in self.clients if x.connected] s.close()
def run(self): self.running = True app = Application() buffer = '' ttl = None state = 0 while self.running: if self.dev is None: time.sleep(1) try: self.dev = serial.serial_for_url(self.devUrl, 115200, timeout=0) except Exception as e: self.dev = None continue if state == 0: x = self.__readByte(interruptable=True) if x == '': if self.__waitForResponse is not None and self.__waitForResponse.queued + 5 < time.time( ): self.__waitForResponse.timeout() self.__waitForResponse = None if len(self.__queue) and self.__waitForResponse is None: state = 1 continue if x == '\r': continue if x == '+': # Start of data buffer = '' continue if x == '\n': (cmd, params) = RF433Msg.parseResponse(buffer) if cmd is None: continue if self.__waitForResponse is not None: if cmd == self.__waitForResponse.cmd(): self.__waitForResponse.response(params) self.__waitForResponse = None continue app.queue(self.handler.decodeData, cmd, params) continue buffer = buffer + x elif state == 1: if len(self.__queue) == 0: state = 0 continue self.__waitForResponse = self.__queue.pop(0) self.__send(self.__waitForResponse.commandString()) self.__waitForResponse.queued = time.time() state = 0