def run(self): ssbot = None botlist = [] try: ssbot = SubspaceBot(False, False, self.MQueue, logging.getLogger( "ML." + self.type + ".Core")) ssbot.set_bot_info(self.type, self.description, self.owner) self.ssbot = ssbot ssbot.arena = self.arena # serexl's bots look at arena in init for m in self.modules: bot = load_bot( ssbot, m[0], m[1], self.inifile, self.args, logging.getLogger("ML." + self.type + "." + m[0]) ) if bot: botlist.append(bot) retry = 0 while self.keepgoing: ssbot.connect_to_server( self.host, self.port, self.bname, self.bpassword, self.arena ) while ssbot.is_connected() and self.keepgoing: retry = 0 event = ssbot.wait_for_event() for b in botlist: b.handle_events(ssbot, event) if ssbot.should_reconnect() and retry < 6: self.logger.debug("Disconnected...") ssbot.reset_state() retry += 1 time.sleep(60 * retry) self.logger.debug("Reconnecting...") else: break except: log_exception(self.logger) finally: if isinstance(ssbot, SubspaceBot) and ssbot.is_connected(): ssbot.disconnect_from_server() for b in botlist: b.cleanup()