If you are going to write a new protocol for Twisted, start here. The
docstrings of this class explain how you can get started. Any protocol
implementation, either client or server, should be a subclass of me.

My API is quite simple. Implement dataReceived(data) to handle both
event-based and synchronous input; output can be sent through the
'transport' attribute, which is to be an instance that implements twisted.internet.interfaces.ITransport.

Some subclasses exist already to help you write common types of
protocols: see the twisted.protocols.basic
module for a few of them.

This may be considered the initializer of the protocol, because it is
called when the connection is completed. For clients, this is called once
the connection to the server has been established; for servers, this is
called after an accept() call stops blocking and a socket has been
received. If you need to send any greeting or initial message, do it
here.