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()
Пример #2
0
    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