from twisted.internet.protocol import Factory from twisted.protocols.basic import LineReceiver from twisted.internet import reactor from elementtree.ElementTree import * import ConfigParser config = ConfigParser.ConfigParser() config.read("settings.ini") port = int(config.get("server", "port")) class ChatServer(LineReceiver): userlist = [] def connectionMade(self): self.transport.userid = len(self.userlist) self.transport.room = "Lobby" self.transport.username = "" self.userlist.append(self.transport) print "New connection! ID = %s" % (self.transport.userid) def lineReceived(self, line): element = fromstring(line) time = element.findtext("time") user = element.findtext("nick") msg = element.findtext("msg") type = element.findtext("type") if type == "norm": self.send("[%s] <%s> %s" % (time, user, msg),'room') elif type == "note": self.send("[%s] * %s" % (time, msg),'room') elif type == "newuser": self.send("[%s] * %s" % (time, msg),'room') def get_list_of_usernames(self): usernames = [] for user in self.userlist: if user.room == self.transport.room: usernames.append(user.username) return usernames def send(self,message, where): def all(): for user in self.userlist: user.write(message) def room(): for user in self.userlist: if user.room == self.transport.room: user.write(message) def myself(): self.transport.write(message) {'all': all, 'room': room, 'myself': myself}[where]() def connectionLost(self, reason): self.userlist.remove(self.transport) print "Lost connection, %s" % (reason) factory = Factory() factory.protocol = ChatServer reactor.listenTCP(port, factory) reactor.run()