X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=lib%2Fmuff%2Fmuffmain.py;h=9e6c0b41830e3ade26de1b162efb9cebadd95515;hp=0b6707ea7b9606f94a41fcf3952caaec3c6487ef;hb=0f39af78818acbbee0b99145ff5ff303553027c6;hpb=d49d19d943672b3cea1b2e43802f4b5eca6c81b5 diff --git a/lib/muff/muffmain.py b/lib/muff/muffmain.py index 0b6707e..9e6c0b4 100644 --- a/lib/muff/muffmain.py +++ b/lib/muff/muffmain.py @@ -1,69 +1,102 @@ """Main loop for the MUFF Engine""" -# Copyright (c) 2005 mudpy, Jeremy Stanley -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# - Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# - Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. +# Copyright (c) 2005 mudpy, Jeremy Stanley , all rights reserved. +# Licensed per terms in the LICENSE file distributed with this software. +# string.strip is used to clean up leading/trailing whitespace in user input import string + +# time.sleep is used in the loop to save cpu and provide crude pulse timing import time +# hack to load all modules in the muff package import muff for module in muff.__all__: exec("import " + module) def main(): + """The main loop.""" + + # loop indefinitely while the world is not flagged for termination while not muffvars.terminate_world: - if not muffvars.newsocket: - muffsock.initialize_server_socket() + + # open the listening socket if it hasn't been already + if not muffvars.newsocket: muffsock.initialize_server_socket() + + # pause for a configurable amount of time (decimal seconds) time.sleep(muffconf.config_data.getfloat("general", "increment")) + + # the world was flagged for a reload of all code/data if muffvars.reload_modules: + + # reload the muff package reload(muff) + + # reload all modules listed in the muff package for module in muff.__all__: exec("reload(muff." + module + ")") - muffvars.reload_modules = 0 + + # reset the reload flag + muffvars.reload_modules = False + + # assign a user if a new connection is waiting user = muffsock.check_for_connection(muffvars.newsocket) + + # there was a new connection if user: + + # welcome to the user list muffvars.userlist.append(user) + + # make a note of it + # TODO: need to log this crap print len(muffvars.userlist),"connection(s)" + + # iterate over the connected users for each_user in muffvars.userlist: + + # show the user a menu as needed each_user.show_menu() - input_data = "" + + # check for some input + # TODO: make a separate function for this try: input_data = each_user.connection.recv(1024) except: - pass + input_data = "" + # we got something if input_data: + + # tack this on to any previous partial input each_user.partial_input += input_data - if each_user.partial_input and each_user.partial_input[-1] == "\n": + + # the held input ends in a newline + if each_user.partial_input[-1] == "\n": + + # filter out non-printable characters each_user.partial_input = filter(lambda x: x>=' ' and x<='~', each_user.partial_input) + + # strip off leading/trailing whitespace each_user.partial_input = string.strip(each_user.partial_input) + + # move it to the end of the input queue each_user.input_queue.append(each_user.partial_input) + + # reset the held partial input each_user.partial_input = "" + + # pass the first item in the input + # queue to the main handler muffcmds.handle_user_input(each_user, each_user.input_queue[0]) + + # remove the first item from the queue each_user.input_queue.remove(each_user.input_queue[0]) + + # the loop has terminated, so tear down all sockets + # TODO: move the save from command_halt() to here muffsock.destroy_all_sockets() + + # log a final message + # TODO: need a logging function for this kind of stuff print "Shutting down now."