maix dock m1w mqtt时如何修改底层check_msg():使得在没有消息pass
2021-03-283237
AI 快速预览详细
本文讨论了如何在Maix Dock M1W上修改MQTT的check_msg()函数,以处理无消息的情况。具体方法是在check_msg()函数中添加条件判断,如果没有消息则直接返回。这样可以避免不必要的错误,确保系统的稳定运行。
|
大佬看看 能不能救一下 |
-
SunMarch-202103288702..png (150.07 KB, 下载次数: 3889)
底层描述
-
SunMarch-202103287990..png (68.62 KB, 下载次数: 3887)
这是底层





return None
修改这两句
res = self.sock.read(1)
self.sock.setblocking(True)
if res is None:
return None
if res == b"":
raise OSError(-1)
if res == b"\xd0": # PINGRESP
sz = self.sock.read(1)[0]
assert sz == 0
return None
op = res[0]
if op & 0xf0 != 0x30:
return op
sz = self._recv_len()
topic_len = self.sock.read(2)
topic_len = (topic_len[0] << 8) | topic_len[1]
topic = self.sock.read(topic_len)
sz -= topic_len + 2
if op & 6:
pid = self.sock.read(2)
pid = pid[0] << 8 | pid[1]
sz -= 2
msg = self.sock.read(sz)
self.cb(topic, msg)
if op & 6 == 2:
pkt = bytearray(b"\x40\x02\0\0")
struct.pack_into("!H", pkt, 2, pid)
self.sock.write(pkt)
elif op & 6 == 4:
assert 0
# Checks whether a pending message from server is available.
# If not, returns immediately with None. Otherwise, does
# the same processing as wait_msg.
def check_msg(self):
self.sock.setblocking(False)
return self.wait_msg()[/code]