Imported from archive.
[mudpy.git] / lib / muff / muffsock.py
1 """Socket objects 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 socket
31
32 import muff
33 for module in muff.__all__:
34         exec("import " + module)
35
36 def check_for_connection(newsocket):
37         try:
38                 connection, address = newsocket.accept()
39         except:
40                 return None
41         print "Connection from", address
42         connection.setblocking(0)
43         user = muffuser.User();
44         user.connection = connection
45         user.address = address[0]
46         return user
47
48 def initialize_server_socket():
49         newsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
50         newsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
51         newsocket.bind((muffconf.config_data.get("network", "host"), muffconf.config_data.getint("network", "port")))
52         newsocket.setblocking(0)
53         newsocket.listen(1)
54         print "Waiting for connection(s)..."
55         muffvars.newsocket = newsocket
56
57 def destroy_all_sockets():
58         print "Closing remaining connections..."
59         for user in muffvars.userlist:
60                 user.connection.close()
61