Initial import to Tizen
[profile/ivi/python-twisted.git] / doc / core / howto / listings / servers / chat.py
1 from twisted.internet.protocol import Factory
2 from twisted.protocols.basic import LineReceiver
3 from twisted.internet import reactor
4
5 class Chat(LineReceiver):
6
7     def __init__(self, users):
8         self.users = users
9         self.name = None
10         self.state = "GETNAME"
11
12     def connectionMade(self):
13         self.sendLine("What's your name?")
14
15     def connectionLost(self, reason):
16         if self.users.has_key(self.name):
17             del self.users[self.name]
18
19     def lineReceived(self, line):
20         if self.state == "GETNAME":
21             self.handle_GETNAME(line)
22         else:
23             self.handle_CHAT(line)
24
25     def handle_GETNAME(self, name):
26         if self.users.has_key(name):
27             self.sendLine("Name taken, please choose another.")
28             return
29         self.sendLine("Welcome, %s!" % (name,))
30         self.name = name
31         self.users[name] = self
32         self.state = "CHAT"
33
34     def handle_CHAT(self, message):
35         message = "<%s> %s" % (self.name, message)
36         for name, protocol in self.users.iteritems():
37             if protocol != self:
38                 protocol.sendLine(message)
39
40
41 class ChatFactory(Factory):
42
43     def __init__(self):
44         self.users = {} # maps user names to Chat instances
45
46     def buildProtocol(self, addr):
47         return Chat(self.users)
48
49
50 reactor.listenTCP(8123, ChatFactory())
51 reactor.run()