@@ -70,6 +70,7 @@ 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
74
try :
74
75
msg_type , msg_id , h_data = struct .unpack ('!BHH' , rsp_data [:self .MSG_HEAD_LEN ])
75
76
except Exception as p_err :
@@ -83,9 +84,10 @@ def parse_response(self, rsp_data, msg_buffer):
83
84
elif msg_type in (self .MSG_HW , self .MSG_BRIDGE , self .MSG_INTERNAL , self .MSG_REDIRECT ):
84
85
msg_body = rsp_data [self .MSG_HEAD_LEN : self .MSG_HEAD_LEN + h_data ]
85
86
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 :]
86
88
else :
87
89
raise BlynkError ("Unknown message type: '{}'" .format (msg_type ))
88
- return msg_type , msg_id , h_data , msg_args
90
+ return msg_type , msg_id , h_data , msg_args , msg_tail
89
91
90
92
def heartbeat_msg (self , heartbeat , rcv_buffer ):
91
93
return self ._pack_msg (self .MSG_INTERNAL , 'ver' , __version__ , 'buff-in' , rcv_buffer , 'h-beat' , heartbeat ,
@@ -214,7 +216,7 @@ def _authenticate(self):
214
216
rsp_data = self .receive (self .rcv_buffer , self .SOCK_MAX_TIMEOUT )
215
217
if not rsp_data :
216
218
raise BlynkError ('Auth stage timeout' )
217
- msg_type , _ , status , args = self .parse_response (rsp_data , self .rcv_buffer )
219
+ msg_type , _ , status , args , _ = self .parse_response (rsp_data , self .rcv_buffer )
218
220
if status != self .STATUS_OK :
219
221
if status == self .STATUS_INVALID_TOKEN :
220
222
raise BlynkError ('Invalid Auth Token' )
@@ -229,7 +231,7 @@ def _set_heartbeat(self):
229
231
rcv_data = self .receive (self .rcv_buffer , self .SOCK_MAX_TIMEOUT )
230
232
if not rcv_data :
231
233
raise BlynkError ('Heartbeat stage timeout' )
232
- _ , _ , status , _ = self .parse_response (rcv_data , self .rcv_buffer )
234
+ _ , _ , status , _ , _ = self .parse_response (rcv_data , self .rcv_buffer )
233
235
if status != self .STATUS_OK :
234
236
raise BlynkError ('Set heartbeat returned code={}' .format (status ))
235
237
self .log ('Heartbeat = {} sec. MaxCmdBuffer = {} bytes' .format (self .heartbeat , self .rcv_buffer ))
@@ -353,8 +355,9 @@ def read_response(self, timeout=0.5):
353
355
rsp_data = self .receive (self .rcv_buffer , self .SOCK_TIMEOUT )
354
356
if rsp_data :
355
357
self ._last_rcv_time = ticks_ms ()
356
- msg_type , msg_id , h_data , msg_args = self .parse_response (rsp_data , self .rcv_buffer )
357
- self .process (msg_type , msg_id , h_data , msg_args )
358
+ while rsp_data :
359
+ msg_type , msg_id , h_data , msg_args , rsp_data = self .parse_response (rsp_data , self .rcv_buffer )
360
+ self .process (msg_type , msg_id , h_data , msg_args )
358
361
359
362
def run (self ):
360
363
if not self .connected ():
0 commit comments