Esempio n. 1
0
class ChatServer():
    def __init__(self, port):
        self.clients = {}
        self.port = port
        self.server_socket = ReadWriteSocket()
        self.keep_running = False
    
    def start(self):
        self.server_socket.bind(('', self.port))
        self.server_socket.listen(5)
        print "Listening for connections..."
        self.keep_running = True
        sockets = [self.server_socket]
        nicknames = {}
        while self.keep_running:
            readable, writable, error = select.select(sockets, [], [])
            if len(readable) > 0:
                for sock in readable:
                    if sock is self.server_socket:
                        print "New client accepted."
                        (client_socket, address) = sock.accept()
                        sockets.append(client_socket)
                    else:
                        msg = sock.readnext()
                        if not sock in nicknames.keys():
                            if msg in nicknames.values():
                                sock.write("ERROR: Nickname already in use.")
                            else:
                                nicknames[sock] = msg
                                sock.write("SERVER: Welcome to chat!")
                        elif msg == "":
                            sock.close()
                            sockets.remove(sock)
                            print "Client disconnected."
                        else:
                            for client_socket in sockets:
                                if not client_socket is self.server_socket:
                                    client_socket.write("[%s]> %s" % (nicknames[sock], msg))
                            print msg
        for socket in sockets:
            socket.close()    
    def exit(self):
        self.keep_running = False