rendered paste bodyfrom 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 IP = %s" % (self.transport.userid, self.transport.getHost())
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()