@@ -70,9 +70,10 @@ def _pack_msg(self, msg_type, *args, **kwargs):
70
70
71
71
def parse_response (self , rsp_data , msg_buffer ):
72
72
msg_args = []
73
- msg_tail = b''
73
+ msg_len = 0
74
74
try :
75
75
msg_type , msg_id , h_data = struct .unpack ('!BHH' , rsp_data [:self .MSG_HEAD_LEN ])
76
+ msg_len = self .MSG_HEAD_LEN + h_data
76
77
except Exception as p_err :
77
78
raise BlynkError ('Message parse error: {}' .format (p_err ))
78
79
if msg_id == 0 :
@@ -82,12 +83,11 @@ def parse_response(self, rsp_data, msg_buffer):
82
83
elif msg_type in (self .MSG_RSP , self .MSG_PING ):
83
84
pass
84
85
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 ]
86
87
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 :]
88
88
else :
89
89
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
91
91
92
92
def heartbeat_msg (self , heartbeat , rcv_buffer ):
93
93
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):
356
356
if rsp_data :
357
357
self ._last_rcv_time = ticks_ms ()
358
358
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 )
360
360
self .process (msg_type , msg_id , h_data , msg_args )
361
+ rsp_data = rsp_data [msg_len :]
361
362
362
363
def run (self ):
363
364
if not self .connected ():
0 commit comments