#!/usr/bin/env python
from twisted.internet.protocol import Factory, Protocol
from circuits import handler, BaseComponent, Debugger
from circuits.net.sockets import Close, Write, TCPServer
class TwistedTransport(BaseComponent):
def __init__(self, sock, host, port):
super(TwistedTransport, self).__init__()
self.sock = sock
self.host = host
self.port = port
def write(self, data):
self.fire(Write(self.sock, data))
def loseConnection(self):
self.fire(Close(self.sock))
class TwistedProtocol(BaseComponent, Protocol):
@handler("connect", channel="*")
def _on_connect(self, sock, host, port):
self.transport = TwistedTransport(sock, host, port).register(self)
return self.connectionMade()
class QOTD(TwistedProtocol):
def connectionMade(self):
# self.factory was set by the factory's default buildProtocol:
self.transport.write(self.factory.quote + '\r\n')
self.transport.loseConnection()
class TwistedFactory(BaseComponent, Factory):
@handler("started", channel="*")
def _on_started(self, manager):
print "Registering protocol...."
self.protocol = self.protocol().register(self)
self.protocol.factory = self
class QOTDFactory(TwistedFactory):
# This will be used by the default buildProtocol to create new protocols:
protocol = QOTD
def __init__(self, quote=None):
super(QOTDFactory, self).__init__()
self.quote = quote or 'An apple a day keeps the doctor away'
app = (TCPServer(8007) + Debugger())
QOTDFactory("Hello Twisted!").register(app)
app.run()