@@ -188,38 +188,45 @@ def _handle_close_room(self, message):
188
188
namespace = message .get ('namespace' ))
189
189
190
190
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