All pastes #810569 Raw Edit

Someone

public text v1 · immutable
·published 2007-12-10 01:49 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.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()