mirror of
https://github.com/ammaraskar/pyCraft.git
synced 2024-11-22 02:08:56 +01:00
Allow reconnection from within exception handlers
This implements the changes suggested in <https://github.com/ammaraskar/pyCraft/issues/146#issuecomment-738914064>, i.e.: 1. `minecraft.networking.Connection.disconnect' now correctly terminates the new networking thread if it is still waiting to replace the old one, and 2. `minecraft.networking.Connectoin._handle_exception' no longer calls `disconnect' if any exception handler has initiated a new connection.
This commit is contained in:
parent
93db454cb5
commit
73728957e7
@ -457,7 +457,9 @@ class Connection(object):
|
|||||||
while self._pop_packet():
|
while self._pop_packet():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if self.networking_thread is not None:
|
if self.new_networking_thread is not None:
|
||||||
|
self.new_networking_thread.interrupt = True
|
||||||
|
elif self.networking_thread is not None:
|
||||||
self.networking_thread.interrupt = True
|
self.networking_thread.interrupt = True
|
||||||
|
|
||||||
if self.socket is not None:
|
if self.socket is not None:
|
||||||
@ -513,9 +515,15 @@ class Connection(object):
|
|||||||
except (TypeError, AttributeError):
|
except (TypeError, AttributeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Record the exception and cleanly terminate the connection.
|
# Record the exception.
|
||||||
self.exception, self.exc_info = exc, exc_info
|
self.exception, self.exc_info = exc, exc_info
|
||||||
self.disconnect(immediate=True)
|
|
||||||
|
# The following condition being false indicates that an exception
|
||||||
|
# handler has initiated a new connection, meaning that we should not
|
||||||
|
# interfere with the connection state. Otherwise, make sure that any
|
||||||
|
# current connection is completely terminated.
|
||||||
|
if (self.new_networking_thread or self.networking_thread).interrupt:
|
||||||
|
self.disconnect(immediate=True)
|
||||||
|
|
||||||
# If allowed by the final exception handler, re-raise the exception.
|
# If allowed by the final exception handler, re-raise the exception.
|
||||||
if final_handler is None and not caught:
|
if final_handler is None and not caught:
|
||||||
|
Loading…
Reference in New Issue
Block a user