def disconnect(self): # Avoid multiple calls. if not self.keep_alive: return self.keep_alive = False try: if self.player_mgr: self.player_mgr.logout() except AttributeError: pass # Unblock and flush queues. self.incoming_pending.put_nowait(None) while not self.incoming_pending.empty(): self.incoming_pending.get(block=False, timeout=None) self.outgoing_pending.put_nowait(None) while not self.outgoing_pending.empty(): self.outgoing_pending.get(block=False, timeout=None) WorldSessionStateHandler.remove(self) try: self.request.shutdown(socket.SHUT_RDWR) self.request.close() except OSError: pass
def disconnect(self): try: if self.player_mgr: self.player_mgr.logout() except AttributeError: pass self.keep_alive = False WorldSessionStateHandler.remove(self) try: self.request.shutdown(socket.SHUT_RDWR) self.request.close() except OSError: pass
def disconnect(self): # Avoid multiple calls. if not self.keep_alive: return self.keep_alive = False try: if self.player_mgr: self.player_mgr.logout() except AttributeError: pass # Unblock queues if they are waiting inside loop. if self.incoming_pending.empty(): self.incoming_pending.put_nowait(None) if self.outgoing_pending.empty(): self.outgoing_pending.put_nowait(None) WorldSessionStateHandler.remove(self) try: self.request.shutdown(socket.SHUT_RDWR) self.request.close() except OSError: pass