From 6a934e8dc02ffa98570ce20080213554c550c625 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 29 Oct 2008 13:36:54 +0600 Subject: [PATCH] converted twisted_ex3_server.py to use twisteds.basic and twisteds.join_reactor --- examples/twisted_ex3_server.py | 92 +++++++++------------------------- 1 file changed, 24 insertions(+), 68 deletions(-) diff --git a/examples/twisted_ex3_server.py b/examples/twisted_ex3_server.py index fc0baf4..6af8b7e 100644 --- a/examples/twisted_ex3_server.py +++ b/examples/twisted_ex3_server.py @@ -1,73 +1,29 @@ -from twisted.internet import pollreactor; pollreactor.install() -from twisted.internet.protocol import Factory -from twisted.internet import reactor -from twisted.protocols import basic -from twisted.internet.error import ConnectionDone +from eventlet.twisteds import basic +from eventlet.twisteds import join_reactor -from eventlet.api import spawn, get_hub -from eventlet.channel import channel +class Chat: -class LineOnlyReceiver(basic.LineOnlyReceiver): + def __init__(self): + self.participants = [] - def __init__(self, channel): - self.channel = channel - - 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): + def handler(self, conn): + peer = conn.getPeer() + print 'new connection from %s' % (peer, ) + self.participants.append(conn) try: - return self.readline() - except ConnectionDone: - raise StopIteration + for line in conn: + print 'received from %s: %s' % (peer, line) + for buddy in self.participants: + if buddy is not conn: + buddy.sendline('from %s: %s' % (peer, line)) + except Exception, ex: + print peer, ex + else: + print peer, 'connection done' + finally: + self.participants.remove(conn) - -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, ) - try: - for line in linerecv: - print 'received from %s: %s' % (peer, line) - print peer, 'connection done' - except Exception, ex: - print peer, ex - -reactor.listenTCP(8007, MyFactory(handler)) -get_hub().switch() +chat = Chat() +basic.listenTCP(basic.line_only_receiver, chat.handler, 8007) +from twisted.internet import reactor +reactor.run()