This class provides support for clients connecting to a switchboard
server.

Switchboard servers are used for conversations with other people on the
MSN network. This means that the number of conversations at any given time
will be directly proportional to the number of connections to varioius
switchboard servers.

MSN makes no distinction between single and group conversations, so any
number of users may be invited to join a specific conversation taking place
on a switchboard server.

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.

A Deferred, the callback for which will be called when the server notifies
us that the user has indeed been invited. The callback argument will be a
tuple with 1 element, the sessionID given to the invited user. I'm not sure
if this is useful or not.

Depending on the value of message.ack. If set to MSNMessage.MESSAGE_ACK or
MSNMessage.MESSAGE_NACK a Deferred will be returned, the callback for which
will be fired when an ACK or NACK is received - the callback argument will
be (None,). If set to MSNMessage.MESSAGE_ACK_NONE then the return value is
None.

used to send a typing notification. Upon receiving this message the
official client will display a 'user is typing' message to all other users
in the chat session for 10 seconds. The official client sends one of these
every 5 seconds (I think) as long as you continue to type.

A Deferred, the callback of which will be fired when the user responds to
this invitation with an appropriate message. The callback argument will be
a tuple with 3 elements, the first being 1 or 0 depending on whether they
accepted the transfer (1=yes, 0=no), the second being an invitation cookie
to identify your follow-up responses and the third being the message 'info'
which is a dict of information they sent in their reply (this doesn't
really need to be used). If you wish to proceed with the transfer see the
sendTransferInfo method.

A Deferred, the callback for which will be fired when the user responds
with the transfer information. The callback argument will be a tuple with 5
elements, whether or not they wish to proceed with the transfer (1=yes,
0=no), their ip, the port, the authentication cookie (see
FileReceive/FileSend) and the message info (dict) (in case they send extra
header-like info like Internal-IP, this doesn't necessarily need to be
used). If you wish to proceed with the transfer see FileReceive.