1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/usr/bin/env python
- from twisted.internet.protocol import Factory
- from twisted.internet.endpoints import TCP4ServerEndpoint
- from twisted.internet import reactor
- from twisted.internet.protocol import Protocol
- class QOTD(Protocol):
- def connectionMade(self):
- self.transport.write("An apple a day keeps the doctor away\r\n".encode("utf-8"))
- self.transport.loseConnection()
- class QOTDFactory(Factory):
- def buildProtocol(self, addr):
- return QOTD()
- # Why does this seem to be doing line buffering?
- # Because telnet defaults to line mode
- # ^]
- # telnet> mode character
- # or:
- # telnet> mode line
- # to toggle. (The echo works correctly, it's the telnet client that's silly.)
- class Echo(Protocol):
- def __init__(self, factory):
- self.factory = factory
- def connectionMade(self):
- self.factory.numProtocols = self.factory.numProtocols + 1
- self.transport.write(
- "Welome! There are currently {0} open connections.\n".format(
- self.factory.numProtocols ).encode('utf-8') )
- def connectionLost(self, reason):
- self.factory.numProtocols = self.factory.numProtocols - 1
- def dataReceived(self, data):
- self.transport.write(data)
- class EchoFactory(Factory):
- def __init__(self):
- self.numProtocols = 0
- def buildProtocol(self, addr):
- return Echo(self)
- endpoint = TCP4ServerEndpoint(reactor, 8007)
- endpoint.listen(EchoFactory())
- qotdpoint = TCP4ServerEndpoint(reactor, 8008)
- qotdpoint.listen(QOTDFactory())
- reactor.run()
|