X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy;h=431c9a021bbe0baddee4f193c5505fb659e94a91;hp=5130834ea8b8e0516bb62a5daa3d025fb86c9d57;hb=74d37bfacdd2d7c13192fe2cd5e34f03cc2e399f;hpb=fecd4c0fc49593052697b8cf199603cf1fac2b61 diff --git a/mudpy b/mudpy index 5130834..431c9a0 100755 --- a/mudpy +++ b/mudpy @@ -1,36 +1,60 @@ #!/usr/bin/python -"""Skeletal executable for the MUFF Engine""" +"""Skeletal executable for the mudpy engine.""" -# Copyright (c) 2005 mudpy, Jeremy Stanley , all rights reserved. +# Copyright (c) 2006 mudpy, Jeremy Stanley , all rights reserved. # Licensed per terms in the LICENSE file distributed with this software. -# muff uses the ini-style configs supported by the ConfigParser module -import ConfigParser +# core objects for the mudpy engine +import mudpy -# need the sys module to alter the import path appropriately -import sys +# a consistent list so we can reimport these on reload +importlist = [ + "create_pidfile", + "daemonize", + "log", + "on_pulse", + "reload_data", + "remove_pidfile", + "universe" + ] +for item in importlist: exec("from mudpy import " + item) -def get_main_loop(): - """Find and return the main loop function""" +# log an initial message +from sys import argv +log("Started mudpy with command line: " + " ".join(argv)) - # figure out where to find our main configuration file - config_data = ConfigParser.SafeConfigParser() - config_dirs = [".", "./etc", "/usr/local/muff", "/usr/local/muff/etc", "/etc/muff", "/etc" ] - config_name = "mudpy.conf" - config_files = [] - for each_dir in config_dirs: - config_files.append(each_dir + "/" + config_name) +# fork and disassociate +daemonize() - # load the config file, get the module path and add it to sys.path - config_data.read(config_files) - module_path = config_data.get("files", "modules") - sys.path.append(module_path) +# make the pidfile +create_pidfile(universe) - # import the main loop function - from muff.muffmain import main - return main +# loop indefinitely while the world is not flagged for termination or +# there are connected users +while not universe.terminate_world or universe.userlist: -# load the main loop and run it -main = get_main_loop() -main() + # the world was flagged for a reload of all code/data + if universe.reload_modules: + + # reload the mudpy module + reload(mudpy) + for item in importlist: exec("from mudpy import " + item) + + # move data into new persistent objects + reload_data() + + # reset the reload flag + universe.reload_modules = False + + # do what needs to be done on each pulse + on_pulse() + +# the loop has terminated, so save persistent data +universe.save() + +# log a final message +log("Shutting down now.") + +# get rid of the pidfile +remove_pidfile(universe)