0b6707ea7b9606f94a41fcf3952caaec3c6487ef
[mudpy.git] / lib / muff / muffmain.py
1 """Main loop for the MUFF Engine"""
2
3 # Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 #
10 #    - Redistributions of source code must retain the above copyright
11 #      notice, this list of conditions and the following disclaimer.
12 #    - Redistributions in binary form must reproduce the above
13 #      copyright notice, this list of conditions and the following
14 #      disclaimer in the documentation and/or other materials provided
15 #      with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 # POSSIBILITY OF SUCH DAMAGE.
29
30 import string
31 import time
32
33 import muff
34 for module in muff.__all__:
35         exec("import " + module)
36
37 def main():
38         while not muffvars.terminate_world:
39                 if not muffvars.newsocket:
40                         muffsock.initialize_server_socket()
41                 time.sleep(muffconf.config_data.getfloat("general", "increment"))
42                 if muffvars.reload_modules:
43                         reload(muff)
44                         for module in muff.__all__:
45                                 exec("reload(muff." + module + ")")
46                         muffvars.reload_modules = 0
47                 user = muffsock.check_for_connection(muffvars.newsocket)
48                 if user:
49                         muffvars.userlist.append(user)
50                         print len(muffvars.userlist),"connection(s)"
51                 for each_user in muffvars.userlist:
52                         each_user.show_menu()
53                         input_data = ""
54                         try:
55                                 input_data = each_user.connection.recv(1024)
56                         except:
57                                 pass
58                         if input_data:
59                                 each_user.partial_input += input_data
60                                 if each_user.partial_input and each_user.partial_input[-1] == "\n":
61                                         each_user.partial_input = filter(lambda x: x>=' ' and x<='~', each_user.partial_input)
62                                         each_user.partial_input = string.strip(each_user.partial_input)
63                                         each_user.input_queue.append(each_user.partial_input)
64                                         each_user.partial_input = ""
65                                         muffcmds.handle_user_input(each_user, each_user.input_queue[0])
66                                         each_user.input_queue.remove(each_user.input_queue[0])
67         muffsock.destroy_all_sockets()
68         print "Shutting down now."
69