Skip to content

Commit dc1a150

Browse files
learn about python reactor
1 parent fda692f commit dc1a150

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

silkBag/twisted/chat.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
def __init__(self, users):
7+
self.users = users
8+
self.name = None
9+
self.state = "GETNAME"
10+
11+
def connectionMade(self):
12+
self.sendLine("What's your name?")
13+
14+
def connectionLost(self, reason):
15+
if self.name in self.users:
16+
del self.users[self.name]
17+
18+
def lineReceived(self, line):
19+
if self.state == "GETNAME":
20+
self.handle_GETNAME(line)
21+
else:
22+
self.handle_CHAT(line)
23+
24+
def handle_GETNAME(self, name):
25+
if name in self.users:
26+
self.sendLine("Name taken, please choose another.")
27+
return
28+
self.sendLine("Welcome, %s!" % (name,))
29+
self.name = name
30+
self.users[name]= self
31+
self.state = "CHAT"
32+
33+
def handle_CHAT(self, message):
34+
message = "<%s> %s"% (self.name, message)
35+
for name, protocol in self.users.iteritems():
36+
if protocol != self:
37+
protocol.sendLine(message)
38+
39+
class ChatFactory(Factory):
40+
def __init__(self):
41+
self.users = {}
42+
43+
def buildProtocol(self, addr):
44+
return Chat(self.users)
45+
46+
reactor.listenTCP(8123, ChatFactory())
47+
reactor.run()

0 commit comments

Comments
 (0)