示例#1
0
    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
示例#2
0
    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
示例#3
0
    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