Merge branch 'feature/shutdown-all-threads'

master
Tristan Gosselin-Hane 6 years ago
commit ce3fc62648
No known key found for this signature in database
GPG Key ID: 0B7E55B60DCA15D5
  1. 26
      minecraft_discord_bridge/minecraft_discord_bridge.py

@ -75,6 +75,8 @@ class MinecraftDiscordBridge():
self.bot_perms.update(manage_messages=True, manage_webhooks=True) self.bot_perms.update(manage_messages=True, manage_webhooks=True)
# Async http request pool # Async http request pool
self.req_future_session = FuturesSession(max_workers=100) self.req_future_session = FuturesSession(max_workers=100)
self.reactor_thread = Thread(target=self.run_auth_server, args=(self.config.auth_port,))
self.aioloop = asyncio.get_event_loop()
# We need to import twisted after setting up the logger because twisted hijacks our logging # We need to import twisted after setting up the logger because twisted hijacks our logging
from . import auth_server from . import auth_server
auth_server.DATABASE_SESSION = self.database_session auth_server.DATABASE_SESSION = self.database_session
@ -461,8 +463,7 @@ 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.start()
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 +494,21 @@ 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) 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