def main(): parser = OptionParser(version=b3.getB3versionString()) parser.add_option("-c", "--config", dest="config", default=None, help="B3 config file. Example: -c b3.xml") parser.add_option( "-r", "--restart", action="store_true", dest="restart", default=False, help="Auto-restart B3 on crash" ) parser.add_option( "-s", "--setup", action="store_true", dest="setup", default=False, help="Setup main b3.xml config file" ) (options, args) = parser.parse_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: run_setup() if options.restart: if options.config: run_autorestart(["--config", options.config] + args) else: run_autorestart([]) else: if main_is_frozen(): # which happens when running from the py2exe build try: run(config=options.config) except SystemExit, msg: # make sure we are not writting to the log: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ print msg except:
def main(): """ Main execution. """ p = argparse.ArgumentParser() p.add_argument('-c', '--config', dest='config', default=None, metavar='b3.ini', help='B3 config file. Example: -c b3.ini') p.add_argument('-r', '--restart', action='store_true', dest='restart', default=False, help='Auto-restart B3 on crash') p.add_argument('-s', '--setup', action='store_true', dest='setup', default=False, help='Setup main b3.ini config file') p.add_argument('-u', '--update', action='store_true', dest='update', default=False, help='Update B3 database to latest version') p.add_argument('-v', '--version', action='version', default=False, version=b3.getB3versionString(), help='Show B3 version and exit') p.add_argument('-a', '--autorestart', action='store_true', dest='autorestart', default=False, help=argparse.SUPPRESS) (options, args) = p.parse_known_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: # setup procedure is deprecated: show configuration file generator web tool url instead sys.stdout.write('\n') console_exit(" *** NOTICE: the console setup procedure is deprecated!\n" \ " *** Please visit %s to generate a new B3 configuration file.\n" % B3_CONFIG_GENERATOR) if options.update: ## UPDATE => CONSOLE run_update(config=options.config) if options.restart: ## AUTORESTART => CONSOLE if options.config: run_autorestart(['--config', options.config] + args) else: run_autorestart([]) else: run_console(options)
def main(): parser = OptionParser(version=b3.getB3versionString()) parser.add_option('-c', '--config', dest='config', default=None, help='B3 config file. Example: -c b3.xml') parser.add_option('-r', '--restart', action='store_true', dest='restart', default=False, help='Auto-restart B3 on crash') parser.add_option('-s', '--setup', action='store_true', dest='setup', default=False, help='Setup main b3.xml config file') (options, args) = parser.parse_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: run_setup() if options.restart: if options.config: run_autorestart(['--config', options.config] + args) else: run_autorestart([]) else: try: run(config=options.config) except SystemExit, msg: print msg if sys.stdout != sys.__stdout__: # make sure we are not writting to the log: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ print msg except:
def main(): """ Main execution. """ p = argparse.ArgumentParser() p.add_argument('-c', '--config', dest='config', default=None, metavar='b3.ini', help='B3 config file. Example: -c b3.ini') p.add_argument('-r', '--restart', action='store_true', dest='restart', default=False, help='Auto-restart B3 on crash') p.add_argument('-s', '--setup', action='store_true', dest='setup', default=False, help='Setup main b3.ini config file') p.add_argument('-u', '--update', action='store_true', dest='update', default=False, help='Update B3 database to latest version') p.add_argument('-v', '--version', action='version', default=False, version=b3.getB3versionString(), help='Show B3 version and exit') p.add_argument('-a', '--autorestart', action='store_true', dest='autorestart', default=False, help=argparse.SUPPRESS) (options, args) = p.parse_known_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: # setup procedure is deprecated: show configuration file generator web tool url instead sys.stdout.write('\n') console_exit(" *** NOTICE: the console setup procedure is deprecated!\n" \ " *** Please visit %s to generate a new B3 configuration file.\n" % B3_CONFIG_GENERATOR) if options.update: ## UPDATE => CONSOLE run_update(config=options.config) if options.restart: ## AUTORESTART => CONSOLE if options.config: run_autorestart(['--config', options.config] + args) else: run_autorestart([]) else: run(options)
def main(): parser = OptionParser(version=b3.getB3versionString()) parser.add_option('-c', '--config', dest='config', default=None, help='B3 config file. Example: -c b3.xml') parser.add_option('-r', '--restart', action='store_true', dest='restart', default=False, help='Auto-restart B3 on crash') parser.add_option('-s', '--setup', action='store_true', dest='setup', default=False, help='Setup main b3.xml config file') parser.add_option('-n', '--nosetup', action="store_true", dest='nosetup', default=False, help='Do not enter setup mode when config is missing') (options, args) = parser.parse_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: run_setup(config=options.config) if options.restart: if options.config: run_autorestart(['--config', options.config] + args) else: run_autorestart([]) else: try: run(config=options.config, nosetup=options.nosetup) except SystemExit, msg: # This needs some work, is ugly a.t.m. but works... kinda if main_is_frozen(): if sys.stdout != sys.__stdout__: # make sure we are not writing to the log: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ print msg raw_input("Press the [ENTER] key") raise except:
def main(): parser = OptionParser(version=b3.getB3versionString()) parser.add_option('-c', '--config', dest='config', default=None, help='B3 config file. Example: -c b3.xml') parser.add_option('-r', '--restart', action='store_true', dest='restart', default=False, help='Auto-restart B3 on crash') parser.add_option('-s', '--setup', action='store_true', dest='setup', default=False, help='Setup main b3.xml config file') parser.add_option('-u', '--update', action='store_true', dest='update', default=False, help='Update B3 database to latest version') parser.add_option('-n', '--nosetup', action="store_true", dest='nosetup', default=False, help='Do not enter setup mode when config is missing') (options, args) = parser.parse_args() if not options.config and len(args) == 1: options.config = args[0] if options.setup: run_setup(config=options.config) if options.update: run_update(config=options.config) if options.restart: if options.config: run_autorestart(['--config', options.config] + args) else: run_autorestart([]) else: try: run(config=options.config, nosetup=options.nosetup) except SystemExit, msg: # This needs some work, is ugly a.t.m. but works... kinda if main_is_frozen(): if sys.stdout != sys.__stdout__: # make sure we are not writing to the log: sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ print msg raw_input("Press the [ENTER] key") raise except:
def main(): p = argparse.ArgumentParser() p.add_argument( '-c', '--config', dest='config', default=None, metavar='b3.ini', help='B3 config file. Example: -c b3.ini' ) p.add_argument( '-u', '--update', action='store_true', dest='update', default=False, help='Update B3 database to latest version' ) p.add_argument( '-v', '--version', action='version', default=False, version=b3.getB3versionString(), help='Show B3 version and exit' ) options, args = p.parse_known_args() if not options.config and len(args) == 1: options.config = args[0] if options.update: run_update(config=options.config) run(options)
def __init__(self, config): self._timeStart = self.time() if not self.loadConfig(config): print('CRITICAL ERROR : COULD NOT LOAD CONFIG') raise SystemExit(220) # set up logging logfile = self.config.getpath('b3', 'logfile') log2console = self.config.has_option('devmode', 'log2console') and self.config.getboolean('devmode', 'log2console') self.log = b3.output.getInstance(logfile, self.config.getint('b3', 'log_level'), log2console) # save screen output to self.screen self.screen = sys.stdout print('Activating log : %s' % logfile) sys.stdout = b3.output.stdoutLogger(self.log) sys.stderr = b3.output.stderrLogger(self.log) # setup ip addresses self._publicIp = self.config.get('server', 'public_ip') self._port = self.config.getint('server', 'port') self._rconPort = self._port # if rcon port is the same as the game port, rcon_port can be ommited self._rconIp = self.config.get('server', 'rcon_ip') if self.config.has_option('server', 'rcon_port'): self._rconPort = self.config.getint('server', 'rcon_port') self._rconPassword = self.config.get('server', 'rcon_password') if self._publicIp[0:1] == '~' or self._publicIp[0:1] == '/': # load ip from a file f = file(self.getAbsolutePath(self._publicIp)) self._publicIp = f.read().strip() f.close() if self._rconIp[0:1] == '~' or self._rconIp[0:1] == '/': # load ip from a file f = file(self.getAbsolutePath(self._rconIp)) self._rconIp = f.read().strip() f.close() try: # resolve domain names self._rconIp = socket.gethostbyname(self._rconIp) except: pass self.bot('%s', b3.getB3versionString()) self.bot('Python: %s', sys.version) self.bot('Starting %s v%s for server %s:%s', self.__class__.__name__, getattr(getModule(self.__module__), '__version__', ' Unknown'), self._rconIp, self._port) # get events self.Events = b3.events.eventManager self.bot('--------------------------------------------') # setup bot bot_name = self.config.get('b3', 'bot_name') if bot_name: self.name = bot_name bot_prefix = self.config.get('b3', 'bot_prefix') if bot_prefix: self.prefix = bot_prefix self.msgPrefix = self.prefix # delay between log reads if self.config.has_option('server', 'delay'): delay = self.config.getfloat('server', 'delay') if self.delay > 0: self.delay = delay # delay between each log's line processing if self.config.has_option('server', 'lines_per_second'): delay2 = self.config.getfloat('server', 'lines_per_second') if delay2 > 0: self.delay2 = 1/delay2 # demo mode: use log time if self.config.has_option('devmode', 'replay'): self.replay = self.config.getboolean('devmode', 'replay') if self.replay: self._timeStart = 0 self.bot('Replay mode enabled') self.storage = b3.storage.getStorage('database', self.config.get('b3', 'database'), self) if self.config.has_option('server','game_log'): # open log file game_log = self.config.get('server','game_log') if game_log[0:6] == 'ftp://' or game_log[0:7] == 'sftp://' or game_log[0:7] == 'http://': self.remoteLog = True self.bot('Working in Remote-Log-Mode : %s' % game_log) if self.config.has_option('server', 'local_game_log'): f = self.config.getpath('server', 'local_game_log') else: f = os.path.normpath(os.path.expanduser('games_mp.log')) if self.config.has_option('server', 'log_append'): if not (self.config.getboolean('server', 'log_append') and os.path.isfile(f)): self.screen.write('Creating Gamelog : %s\n' % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.screen.write('Append to Gamelog: %s\n' % f) else: self.screen.write('Creating Gamelog : %s\n' % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.bot('Game log %s', game_log) f = self.config.getpath('server', 'game_log') self.bot('Starting bot reading file %s', f) self.screen.write('Using Gamelog : %s\n' % f) if os.path.isfile(f): self.input = file(f, 'r') # seek to point in log file? if self.replay: pass elif self.config.has_option('server', 'seek'): seek = self.config.getboolean('server', 'seek') if seek: self.input.seek(0, os.SEEK_END) else: self.input.seek(0, os.SEEK_END) else: self.error('Error reading file %s', f) raise SystemExit('Error reading file %s\n' % f) # setup rcon self.output = self.OutputClass(self, (self._rconIp, self._rconPort), self._rconPassword) if self.config.has_option('server','rcon_timeout'): custom_socket_timeout = self.config.getfloat('server','rcon_timeout') self.output.socket_timeout = custom_socket_timeout self.bot('Setting Rcon socket timeout to %0.3f sec' % custom_socket_timeout) # testing rcon if self.rconTest: res = self.output.write('status') self.output.flush() self.screen.write('Testing RCON : ') self.screen.flush() _badRconReplies = ['Bad rconpassword.', 'Invalid password.'] if res in _badRconReplies: self.screen.write('>>> Oops: Bad RCON password\n>>> Hint: This will lead to errors and render B3 without any power to interact!\n') self.screen.flush() time.sleep(2) elif res == '': self.screen.write('>>> Oops: No response\n>>> Could be something wrong with the rcon connection to the server!\n>>> Hint 1: The server is not running or it is changing maps.\n>>> Hint 2: Check your server-ip and port.\n') self.screen.flush() time.sleep(2) else: self.screen.write('OK\n') self.loadEvents() self.screen.write('Loading Events : %s events loaded\n' % len(self._events)) self.clients = b3.clients.Clients(self) self.loadPlugins() self.loadArbPlugins() self.game = b3.game.Game(self, self.gameName) self.queue = Queue.Queue(15) # event queue atexit.register(self.shutdown) self.say('%s ^2[ONLINE]' % b3.version)
def __init__(self, config): self._timeStart = self.time() if not self.loadConfig(config): print ("CRITICAL ERROR : COULD NOT LOAD CONFIG") raise SystemExit(220) # set up logging logfile = self.config.getpath("b3", "logfile") log2console = self.config.has_option("devmode", "log2console") and self.config.getboolean( "devmode", "log2console" ) log2both = self.config.has_option("devmode", "log2both") and self.config.getboolean("devmode", "log2both") self.log = b3.output.getInstance(logfile, self.config.getint("b3", "log_level"), log2console, log2both) # save screen output to self.screen self.screen = sys.stdout print ("Activating log : %s" % logfile) sys.stdout = b3.output.stdoutLogger(self.log) sys.stderr = b3.output.stderrLogger(self.log) # setup ip addresses self._publicIp = self.config.get("server", "public_ip") self._port = self.config.getint("server", "port") self._rconPort = self._port # if rcon port is the same as the game port, rcon_port can be ommited self._rconIp = self.config.get("server", "rcon_ip") if self.config.has_option("server", "rcon_port"): self._rconPort = self.config.getint("server", "rcon_port") self._rconPassword = self.config.get("server", "rcon_password") if self._publicIp[0:1] == "~" or self._publicIp[0:1] == "/": # load ip from a file f = file(self.getAbsolutePath(self._publicIp)) self._publicIp = f.read().strip() f.close() if self._rconIp[0:1] == "~" or self._rconIp[0:1] == "/": # load ip from a file f = file(self.getAbsolutePath(self._rconIp)) self._rconIp = f.read().strip() f.close() try: # resolve domain names self._rconIp = socket.gethostbyname(self._rconIp) except: pass self.bot("%s", b3.getB3versionString()) self.bot("Python: %s", sys.version) self.bot( "Starting %s v%s for server %s:%s", self.__class__.__name__, getattr(getModule(self.__module__), "__version__", " Unknown"), self._rconIp, self._port, ) # get events self.Events = b3.events.eventManager self.bot("--------------------------------------------") # setup bot bot_name = self.config.get("b3", "bot_name") if bot_name: self.name = bot_name bot_prefix = self.config.get("b3", "bot_prefix") if bot_prefix: self.prefix = bot_prefix self.msgPrefix = self.prefix # delay between log reads if self.config.has_option("server", "delay"): delay = self.config.getfloat("server", "delay") if self.delay > 0: self.delay = delay # delay between each log's line processing if self.config.has_option("server", "lines_per_second"): delay2 = self.config.getfloat("server", "lines_per_second") if delay2 > 0: self.delay2 = 1 / delay2 # demo mode: use log time if self.config.has_option("devmode", "replay"): self.replay = self.config.getboolean("devmode", "replay") if self.replay: self._timeStart = 0 self.bot("Replay mode enabled") self.storage = b3.storage.getStorage("database", self.config.get("b3", "database"), self) if self.config.has_option("server", "game_log"): # open log file game_log = self.config.get("server", "game_log") if game_log[0:6] == "ftp://" or game_log[0:7] == "sftp://" or game_log[0:7] == "http://": self.remoteLog = True self.bot("Working in Remote-Log-Mode : %s" % game_log) if self.config.has_option("server", "local_game_log"): f = self.config.getpath("server", "local_game_log") else: f = os.path.normpath(os.path.expanduser("games_mp.log")) if self.config.has_option("server", "log_append"): if not (self.config.getboolean("server", "log_append") and os.path.isfile(f)): self.screen.write("Creating Gamelog : %s\n" % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.screen.write("Append to Gamelog: %s\n" % f) else: self.screen.write("Creating Gamelog : %s\n" % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.bot("Game log %s", game_log) f = self.config.getpath("server", "game_log") self.bot("Starting bot reading file %s", f) self.screen.write("Using Gamelog : %s\n" % f) if os.path.isfile(f): self.input = file(f, "r") # seek to point in log file? if self.replay: pass elif self.config.has_option("server", "seek"): seek = self.config.getboolean("server", "seek") if seek: self.input.seek(0, os.SEEK_END) else: self.input.seek(0, os.SEEK_END) else: self.error("Error reading file %s", f) raise SystemExit("Error reading file %s\n" % f) # setup rcon self.output = self.OutputClass(self, (self._rconIp, self._rconPort), self._rconPassword) if self.config.has_option("server", "rcon_timeout"): custom_socket_timeout = self.config.getfloat("server", "rcon_timeout") self.output.socket_timeout = custom_socket_timeout self.bot("Setting Rcon socket timeout to %0.3f sec" % custom_socket_timeout) # testing rcon if self.rconTest: res = self.output.write("status") self.output.flush() self.screen.write("Testing RCON : ") self.screen.flush() _badRconReplies = ["Bad rconpassword.", "Invalid password."] if res in _badRconReplies: self.screen.write( ">>> Oops: Bad RCON password\n>>> Hint: This will lead to errors and render B3 without any power to interact!\n" ) self.screen.flush() time.sleep(2) elif res == "": self.screen.write( ">>> Oops: No response\n>>> Could be something wrong with the rcon connection to the server!\n>>> Hint 1: The server is not running or it is changing maps.\n>>> Hint 2: Check your server-ip and port.\n" ) self.screen.flush() time.sleep(2) else: self.screen.write("OK\n") self.loadEvents() self.screen.write("Loading Events : %s events loaded\n" % len(self._events)) self.clients = b3.clients.Clients(self) self.loadPlugins() self.loadArbPlugins() self.game = b3.game.Game(self, self.gameName) self.queue = Queue.Queue(15) # event queue atexit.register(self.shutdown) self.say("%s ^2[ONLINE]" % b3.version)
def __init__(self, config): self._timeStart = self.time() if not self.loadConfig(config): print('CRITICAL ERROR : COULD NOT LOAD CONFIG') raise SystemExit(220) # set up logging logfile = self.config.getpath('b3', 'logfile') log2console = self.config.has_option('devmode', 'log2console') and self.config.getboolean('devmode', 'log2console') log2both = self.config.has_option('devmode', 'log2both') and self.config.getboolean('devmode', 'log2both') self.log = b3.output.getInstance(logfile, self.config.getint('b3', 'log_level'), log2console, log2both) # save screen output to self.screen self.screen = sys.stdout print('Activating log : %s' % logfile) sys.stdout = b3.output.stdoutLogger(self.log) sys.stderr = b3.output.stderrLogger(self.log) # setup ip addresses self._publicIp = self.config.get('server', 'public_ip') self._port = self.config.getint('server', 'port') self._rconPort = self._port # if rcon port is the same as the game port, rcon_port can be ommited self._rconIp = self.config.get('server', 'rcon_ip') if self.config.has_option('server', 'rcon_port'): self._rconPort = self.config.getint('server', 'rcon_port') self._rconPassword = self.config.get('server', 'rcon_password') if self._publicIp[0:1] == '~' or self._publicIp[0:1] == '/': # load ip from a file f = file(self.getAbsolutePath(self._publicIp)) self._publicIp = f.read().strip() f.close() if self._rconIp[0:1] == '~' or self._rconIp[0:1] == '/': # load ip from a file f = file(self.getAbsolutePath(self._rconIp)) self._rconIp = f.read().strip() f.close() try: # resolve domain names self._rconIp = socket.gethostbyname(self._rconIp) except: pass self.bot('%s', b3.getB3versionString()) self.bot('Python: %s', sys.version) self.bot('Starting %s v%s for server %s:%s', self.__class__.__name__, getattr(getModule(self.__module__), '__version__', ' Unknown'), self._rconIp, self._port) # get events self.Events = b3.events.eventManager self.bot('--------------------------------------------') # setup bot bot_name = self.config.get('b3', 'bot_name') if bot_name: self.name = bot_name bot_prefix = self.config.get('b3', 'bot_prefix') if bot_prefix: self.prefix = bot_prefix self.msgPrefix = self.prefix # delay between log reads if self.config.has_option('server', 'delay'): delay = self.config.getfloat('server', 'delay') if self.delay > 0: self.delay = delay # delay between each log's line processing if self.config.has_option('server', 'lines_per_second'): delay2 = self.config.getfloat('server', 'lines_per_second') if delay2 > 0: self.delay2 = 1/delay2 # demo mode: use log time if self.config.has_option('devmode', 'replay'): self.replay = self.config.getboolean('devmode', 'replay') if self.replay: self._timeStart = 0 self.bot('Replay mode enabled') self.storage = b3.storage.getStorage('database', self.config.get('b3', 'database'), self) if self.config.has_option('server','game_log'): # open log file game_log = self.config.get('server','game_log') if game_log[0:6] == 'ftp://' or game_log[0:7] == 'sftp://' or game_log[0:7] == 'http://': self.remoteLog = True self.bot('Working in Remote-Log-Mode : %s' % game_log) if self.config.has_option('server', 'local_game_log'): f = self.config.getpath('server', 'local_game_log') else: f = os.path.normpath(os.path.expanduser('games_mp.log')) if self.config.has_option('server', 'log_append'): if not (self.config.getboolean('server', 'log_append') and os.path.isfile(f)): self.screen.write('Creating Gamelog : %s\n' % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.screen.write('Append to Gamelog: %s\n' % f) else: self.screen.write('Creating Gamelog : %s\n' % f) ftptempfile = open(f, "w") ftptempfile.close() else: self.bot('Game log %s', game_log) f = self.config.getpath('server', 'game_log') self.bot('Starting bot reading file %s', f) self.screen.write('Using Gamelog : %s\n' % f) if os.path.isfile(f): self.input = file(f, 'r') # seek to point in log file? if self.replay: pass elif self.config.has_option('server', 'seek'): seek = self.config.getboolean('server', 'seek') if seek: self.input.seek(0, os.SEEK_END) else: self.input.seek(0, os.SEEK_END) else: self.error('Error reading file %s', f) raise SystemExit('Error reading file %s\n' % f) # setup rcon self.output = self.OutputClass(self, (self._rconIp, self._rconPort), self._rconPassword) if self.config.has_option('server','rcon_timeout'): custom_socket_timeout = self.config.getfloat('server','rcon_timeout') self.output.socket_timeout = custom_socket_timeout self.bot('Setting Rcon socket timeout to %0.3f sec' % custom_socket_timeout) # testing rcon if self.rconTest: res = self.output.write('status') self.output.flush() self.screen.write('Testing RCON : ') self.screen.flush() _badRconReplies = ['Bad rconpassword.', 'Invalid password.'] if res in _badRconReplies: self.screen.write('>>> Oops: Bad RCON password\n>>> Hint: This will lead to errors and render B3 without any power to interact!\n') self.screen.flush() time.sleep(2) elif res == '': self.screen.write('>>> Oops: No response\n>>> Could be something wrong with the rcon connection to the server!\n>>> Hint 1: The server is not running or it is changing maps.\n>>> Hint 2: Check your server-ip and port.\n') self.screen.flush() time.sleep(2) else: self.screen.write('OK\n') self.loadEvents() self.screen.write('Loading Events : %s events loaded\n' % len(self._events)) self.clients = b3.clients.Clients(self) self.loadPlugins() self.loadArbPlugins() self.game = b3.game.Game(self, self.gameName) self.queue = Queue.Queue(15) # event queue atexit.register(self.shutdown) self.say('%s ^2[ONLINE]' % b3.version)