@@ -188,38 +188,45 @@ def _handle_close_room(self, message):
188188 namespace = message .get ('namespace' ))
189189
190190 def _thread (self ):
191- for message in self ._listen ():
192- data = None
193- if isinstance (message , dict ):
194- data = message
195- else :
196- if isinstance (message , bytes ): # pragma: no cover
197- try :
198- data = pickle .loads (message )
199- except :
200- pass
201- if data is None :
202- try :
203- data = json .loads (message )
204- except :
205- pass
206- if data and 'method' in data :
207- self ._get_logger ().debug ('pubsub message: {}' .format (
208- data ['method' ]))
209- try :
210- if data ['method' ] == 'callback' :
211- self ._handle_callback (data )
212- elif data .get ('host_id' ) != self .host_id :
213- if data ['method' ] == 'emit' :
214- self ._handle_emit (data )
215- elif data ['method' ] == 'disconnect' :
216- self ._handle_disconnect (data )
217- elif data ['method' ] == 'enter_room' :
218- self ._handle_enter_room (data )
219- elif data ['method' ] == 'leave_room' :
220- self ._handle_leave_room (data )
221- elif data ['method' ] == 'close_room' :
222- self ._handle_close_room (data )
223- except :
224- self .server .logger .exception (
225- 'Unknown error in pubsub listening thread' )
191+ while True :
192+ try :
193+ for message in self ._listen ():
194+ data = None
195+ if isinstance (message , dict ):
196+ data = message
197+ else :
198+ if isinstance (message , bytes ): # pragma: no cover
199+ try :
200+ data = pickle .loads (message )
201+ except :
202+ pass
203+ if data is None :
204+ try :
205+ data = json .loads (message )
206+ except :
207+ pass
208+ if data and 'method' in data :
209+ self ._get_logger ().debug ('pubsub message: {}' .format (
210+ data ['method' ]))
211+ try :
212+ if data ['method' ] == 'callback' :
213+ self ._handle_callback (data )
214+ elif data .get ('host_id' ) != self .host_id :
215+ if data ['method' ] == 'emit' :
216+ self ._handle_emit (data )
217+ elif data ['method' ] == 'disconnect' :
218+ self ._handle_disconnect (data )
219+ elif data ['method' ] == 'enter_room' :
220+ self ._handle_enter_room (data )
221+ elif data ['method' ] == 'leave_room' :
222+ self ._handle_leave_room (data )
223+ elif data ['method' ] == 'close_room' :
224+ self ._handle_close_room (data )
225+ except Exception :
226+ self .server .logger .exception (
227+ 'Handler error in pubsub listening thread' )
228+ self .server .logger .error ('pubsub listen() exited unexpectedly' )
229+ break # loop should never exit except in unit tests!
230+ except Exception : # pragma: no cover
231+ self .server .logger .exception ('Unexpected Error in pubsub '
232+ 'listening thread' )
0 commit comments