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)

底层描述

Maix Dock M1W MQTT: 修改check_msg()以处理无消息情况_image_3.webp

SunMarch-202103287990..png (68.62 KB, 下载次数: 3887)

这是底层

Maix Dock M1W MQTT: 修改check_msg()以处理无消息情况_image_6.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
DFBJMRK9gEd
DFBJMRK9gEd
作者
if res == b"":
return None
修改这两句
DFBJMRK9gEd
DFBJMRK9gEd
作者
[code]def wait_msg(self):
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]
- 没有更多了 -