Imported from archive.
[mudpy.git] / lib / muff / muffsock.py
diff --git a/lib/muff/muffsock.py b/lib/muff/muffsock.py
new file mode 100644 (file)
index 0000000..1ca604c
--- /dev/null
@@ -0,0 +1,61 @@
+"""Socket objects for the MUFF Engine"""
+
+# Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>
+# 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.
+
+import socket
+
+import muff
+for module in muff.__all__:
+       exec("import " + module)
+
+def check_for_connection(newsocket):
+       try:
+               connection, address = newsocket.accept()
+       except:
+               return None
+       print "Connection from", address
+       connection.setblocking(0)
+       user = muffuser.User();
+       user.connection = connection
+       user.address = address[0]
+       return user
+
+def initialize_server_socket():
+       newsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+       newsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+       newsocket.bind((muffconf.config_data.get("network", "host"), muffconf.config_data.getint("network", "port")))
+       newsocket.setblocking(0)
+       newsocket.listen(1)
+       print "Waiting for connection(s)..."
+       muffvars.newsocket = newsocket
+
+def destroy_all_sockets():
+       print "Closing remaining connections..."
+       for user in muffvars.userlist:
+               user.connection.close()
+