converted twisted_ex3_server.py to use twisteds.basic and twisteds.join_reactor

This commit is contained in:
Denis Bilenko
2008-10-29 13:36:54 +06:00
parent 1f855222a6
commit 6a934e8dc0

View File

@@ -1,73 +1,29 @@
from twisted.internet import pollreactor; pollreactor.install() from eventlet.twisteds import basic
from twisted.internet.protocol import Factory from eventlet.twisteds import join_reactor
from twisted.internet import reactor
from twisted.protocols import basic
from twisted.internet.error import ConnectionDone
from eventlet.api import spawn, get_hub class Chat:
from eventlet.channel import channel
class LineOnlyReceiver(basic.LineOnlyReceiver): def __init__(self):
self.participants = []
def __init__(self, channel): def handler(self, conn):
self.channel = channel peer = conn.getPeer()
def lineReceived(self, line):
spawn(self.channel.send, line)
def connectionLost(self, reason):
self.channel.send_exception(reason.value)
class line_only_receiver:
def __init__(self, protocol, channel):
self.protocol = protocol
self.channel = channel
def readline(self):
return self.channel.receive()
def send(self, data):
self.protocol.transport.write(data)
def sendline(self, line):
self.protocol.sendLine(line)
# iterator protocol:
def __iter__(self):
return self
def next(self):
try:
return self.readline()
except ConnectionDone:
raise StopIteration
class MyFactory(Factory):
protocol = LineOnlyReceiver
def __init__(self, handler):
self.handler = handler
def buildProtocol(self, addr):
ch = channel()
p = self.protocol(ch)
p.factory = self
spawn(self.handler, line_only_receiver(p, ch))
return p
def handler(linerecv):
peer = linerecv.protocol.transport.getPeer()
print 'new connection from %s' % (peer, ) print 'new connection from %s' % (peer, )
self.participants.append(conn)
try: try:
for line in linerecv: for line in conn:
print 'received from %s: %s' % (peer, line) print 'received from %s: %s' % (peer, line)
print peer, 'connection done' for buddy in self.participants:
if buddy is not conn:
buddy.sendline('from %s: %s' % (peer, line))
except Exception, ex: except Exception, ex:
print peer, ex print peer, ex
else:
print peer, 'connection done'
finally:
self.participants.remove(conn)
reactor.listenTCP(8007, MyFactory(handler)) chat = Chat()
get_hub().switch() basic.listenTCP(basic.line_only_receiver, chat.handler, 8007)
from twisted.internet import reactor
reactor.run()