Shutdown all threads cleanly on KeyboardInterrupt

Fixes #55
master
Tristan Gosselin-Hane 6 years ago
parent 2ceb71f1e8
commit 7d9c2206bc
No known key found for this signature in database
GPG Key ID: 0B7E55B60DCA15D5
  1. 26
      minecraft_discord_bridge/minecraft_discord_bridge.py

@ -461,8 +461,8 @@ class MinecraftDiscordBridge():
del session del session
def run(self): def run(self):
reactor_thread = Thread(target=self.run_auth_server, args=(self.config.auth_port,)) self.reactor_thread = Thread(target=self.run_auth_server, args=(self.config.auth_port,))
reactor_thread.start() self.reactor_thread.start()
self.logger.debug("Checking if the server {} is online before connecting.") self.logger.debug("Checking if the server {} is online before connecting.")
@ -493,7 +493,22 @@ class MinecraftDiscordBridge():
self.register_handlers(self.connection) self.register_handlers(self.connection)
self.connection.connect() self.connection.connect()
self.discord_bot.run(self.config.discord_token) self.aioloop = asyncio.get_event_loop()
try:
self.aioloop.run_until_complete(self.discord_bot.start(self.config.discord_token))
except KeyboardInterrupt:
# log out of discord
self.aioloop.run_until_complete(self.discord_bot.logout())
# log out of minecraft
self.connection.disconnect()
# shut down auth server
from twisted.internet import reactor
reactor.callFromThread(reactor.stop)
# clean up auth server thread
self.reactor_thread.join()
finally:
# close the asyncio event loop discord uses
self.aioloop.close()
def mc_uuid_to_username(self, mc_uuid: str): def mc_uuid_to_username(self, mc_uuid: str):
if mc_uuid not in self.uuid_cache: if mc_uuid not in self.uuid_cache:
@ -612,10 +627,7 @@ class MinecraftDiscordBridge():
self.logger.info("Starting authentication server on port %d", port) self.logger.info("Starting authentication server on port %d", port)
factory.listen("", port) factory.listen("", port)
try: reactor.run(installSignalHandlers=False)
reactor.run(installSignalHandlers=False)
except KeyboardInterrupt:
reactor.stop()
def generate_random_auth_token(self, length): def generate_random_auth_token(self, length):
letters = string.ascii_lowercase + string.digits + string.ascii_uppercase letters = string.ascii_lowercase + string.digits + string.ascii_uppercase

Loading…
Cancel
Save