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.message = "[%s] <%s> %s" % (time, user, msg) for user in self.userlist: user.write(message) if type == "note": self.message = "[%s] * %s" % (time, msg) if type == "newuser": self.message = "[%s] * %s" % (time, msg) pygame.time.wait(5) def send(self,message, where): {'all': all, 'room': room, 'self': self}[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 self(): self.transport.write(message) 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()