All pastes #810585 Raw Edit

Mine

public text v1 · immutable
·published 2007-12-10 02:17 UTC
rendered paste body
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()