1 from twisted.internet.protocol import Factory
2 from twisted.protocols.basic import LineReceiver
3 from twisted.internet import reactor
5 class Chat(LineReceiver):
7 def __init__(self, users):
10 self.state = "GETNAME"
12 def connectionMade(self):
13 self.sendLine("What's your name?")
15 def connectionLost(self, reason):
16 if self.users.has_key(self.name):
17 del self.users[self.name]
19 def lineReceived(self, line):
20 if self.state == "GETNAME":
21 self.handle_GETNAME(line)
23 self.handle_CHAT(line)
25 def handle_GETNAME(self, name):
26 if self.users.has_key(name):
27 self.sendLine("Name taken, please choose another.")
29 self.sendLine("Welcome, %s!" % (name,))
31 self.users[name] = self
34 def handle_CHAT(self, message):
35 message = "<%s> %s" % (self.name, message)
36 for name, protocol in self.users.iteritems():
38 protocol.sendLine(message)
41 class ChatFactory(Factory):
44 self.users = {} # maps user names to Chat instances
46 def buildProtocol(self, addr):
47 return Chat(self.users)
50 reactor.listenTCP(8123, ChatFactory())