예제 #1
0
    def parse_fifo(self):
        if not self.sock:
            return -1

        while len(self.rfifo) >= 2:
            cmd = Packet.parse_header(self.rfifo[:2])
            print(format(cmd, '#06x'))
            dlen = len(self.rfifo)
            print(dlen)
            cls = zd_packet_dict[cmd]
            print(cls)
            plen = cls.get_fmt_len()
            print(plen)

            if plen == -1:
                print('variable len!')
                if dlen <= 4:
                    return 0
                plen = cls.get_var_len_buffer(self.rfifo)

            print(plen)
            if plen > dlen:
                return 0

            pkt = cls(self.rfifo[:plen])
            print(pkt.get_data(as_string=True))
            if pkt.parse(self):
                self.eof = True

            self.rfifo = self.rfifo[plen:]
        return 0