8000 Process multiple messages from single response · vicantec/lib-python@d42468b · GitHub
[go: up one dir, main page]

Skip to content

Commit d42468b

Browse files
committed
Process multiple messages from single response
1 parent f4a3caa commit d42468b

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

blynklib_mp.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ def _pack_msg(self, msg_type, *args, **kwargs):
7070

7171
def parse_response(self, rsp_data, msg_buffer):
7272
msg_args = []
73-
msg_tail = b''
73+
msg_len = 0
7474
try:
7575
msg_type, msg_id, h_data = struct.unpack('!BHH', rsp_data[:self.MSG_HEAD_LEN])
76+
msg_len = self.MSG_HEAD_LEN + h_data
7677
except Exception as p_err:
7778
raise BlynkError('Message parse error: {}'.format(p_err))
7879
if msg_id == 0:
@@ -82,12 +83,11 @@ def parse_response(self, rsp_data, msg_buffer):
8283
elif msg_type in (self.MSG_RSP, self.MSG_PING):
8384
pass
8485
elif msg_type in (self.MSG_HW, self.MSG_BRIDGE, self.MSG_INTERNAL, self.MSG_REDIRECT):
85-
msg_body = rsp_data[self.MSG_HEAD_LEN: self.MSG_HEAD_LEN + h_data]
86+
msg_body = rsp_data[self.MSG_HEAD_LEN: msg_len]
8687
msg_args = [itm.decode('utf-8') for itm in msg_body.split(b'\0')]
87-
msg_tail = rsp_data[self.MSG_HEAD_LEN + h_data:]
8888
else:
8989
raise BlynkError("Unknown message type: '{}'".format(msg_type))
90-
return msg_type, msg_id, h_data, msg_args, msg_tail
90+
return msg_type, msg_id, h_data, msg_args, msg_len
9191

9292
def heartbeat_msg(self, heartbeat, rcv_buffer):
9393
return self._pack_msg(self.MSG_INTERNAL, 'ver', __version__, 'buff-in', rcv_buffer, 'h-beat', heartbeat,
@@ -356,8 +356,9 @@ def read_response(self, timeout=0.5):
356356
if rsp_data:
357357
self._last_rcv_time = ticks_ms()
358358
while rsp_data:
359-
msg_type, msg_id, h_data, msg_args, rsp_data = self.parse_response(rsp_data, self.rcv_buffer)
359+
msg_type, msg_id, h_data, msg_args, msg_len = self.parse_response(rsp_data, self.rcv_buffer)
360360
self.process(msg_type, msg_id, h_data, msg_args)
361+
rsp_data = rsp_data[msg_len:]
361362

362363
def run(self):
363364
if not self.connected():

0 commit comments

Comments
 (0)
0