Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /