Part of twisted.protocols.amp View Source View In Hierarchy
Known subclasses: twisted.protocols.amp.AMP
Implements interfaces: twisted.protocols.amp.IBoxReceiver
A BoxDispatcher
dispatches '_ask', '_answer', and '_error' AmpBox
es, both
incoming and outgoing, to their appropriate destinations.
Outgoing commands are converted into Deferred
s and
outgoing boxes, and associated tracking state to fire those Deferred
when
'_answer' boxes come back. Incoming '_answer' and '_error' boxes are
converted into callbacks and errbacks on those Deferred
s,
respectively.
Instance Variables | _outstandingRequests | a dictionary mapping request IDs to Deferred s
which were returned for those requests.
|
locator | an object with a locateResponder
method that locates a responder function that takes a Box and returns a
result (either a Box or a Deferred which fires one).
| |
boxSender | an object which can send boxes, via the _sendBox method,
such as an AMP
instance.
(type: IBoxSender
) |
Method | __init__ | Undocumented |
Method | startReceivingBoxes | The given boxSender is going to start calling boxReceived on this BoxDispatcher .
|
Method | stopReceivingBoxes | No further boxes will be received here. Terminate all currently oustanding command deferreds with the given reason. |
Method | failAllOutgoing | Call the errback on all outstanding requests awaiting responses. |
Method | callRemoteString | This is a low-level API, designed only for optimizing simple messages for which the overhead of parsing is too great. |
Method | callRemote | This is the primary high-level API for sending messages via AMP. Invoke it with a command and appropriate arguments to send a message to this connection's peer. |
Method | unhandledError | This is a terminal callback called after application code has had a chance to quash any errors. |
Method | ampBoxReceived | An AmpBox was received, representing a command, or an answer to a previously issued command (either successful or erroneous). Respond to it according to its contents. |
Method | dispatchCommand | A box with a _command key was received. |
Method | _nextTag | Generate protocol-local serial numbers for _ask keys. |
Method | _sendBoxCommand | Send a command across the wire with the given amp.Box .
|
Method | _answerReceived | An AMP box was received that answered a command previously sent with callRemote .
|
Method | _errorReceived | An AMP box was received that answered a command previously sent with callRemote ,
with an error.
|
Method | _commandReceived | |
Method | _safeEmit | Emit a box, ignoring ProtocolSwitched
and ConnectionLost
errors which cannot be usefully handled.
|
BoxDispatcher
.
Parameters | boxSender | The IBoxSender to
send command responses to.
|
Parameters | reason | the Failure instance to pass to those errbacks. |
Returns | a string that has not yet been used on this connection. |
Send a command across the wire with the given amp.Box
.
Mutate the given box to give it any additional keys (_command, _ask) required for the command and request/response machinery, then send it.
If requiresAnswer is True, returns a Deferred
which fires
when a response is received. The Deferred
is fired with an
amp.Box
on success, or with an amp.RemoteAmpError
if an error is received.
Parameters | command | a str, the name of the command to issue. |
box | an AmpBox with the arguments for the command. | |
requiresAnswer | a boolean. Defaults to True. If True, return a Deferred which will fire when the other side responds to this command. If False, return None and do not ask the other side for acknowledgement. | |
Returns | a Deferred which fires the AmpBox that holds the response to this command, or None, as specified by requiresAnswer. | |
Raises | ProtocolSwitched | if the protocol has been switched. |
Parameters | command | a str naming the command. |
kw | arguments to the amp box. | |
requiresAnswer | a boolean. Defaults to True. If True, return a Deferred which will fire when the other side responds to this command. If False, return None and do not ask the other side for acknowledgement. | |
Returns | a Deferred which fires the AmpBox that holds the response to this command, or None, as specified by requiresAnswer. |
Parameters | commandType | a subclass of Command.
(type: type
) |
a | Positional (special) parameters taken by the command. Positional
parameters will typically not be sent over the wire. The only command
included with AMP which uses positional parameters is ProtocolSwitchCommand ,
which takes the protocol that will be switched to as its first
argument.
| |
kw | Keyword arguments taken by the command. These are the arguments
declared in the command's 'arguments' attribute. They will be encoded and
sent to the peer as arguments for the commandType .
| |
Returns | If commandType has a requiresAnswer attribute
set to False , then return None . Otherwise,
return a Deferred which
fires with a dictionary of objects representing the result of this call.
Additionally, this Deferred may
fail with an exception representing a connection failure, with UnknownRemoteError
if the other end of the connection fails for an unknown reason, or with any
error specified as a key in commandType 's errors
dictionary.
|
callRemote
.
Parameters | box | an AmpBox with a value for its ANSWER key.
|
callRemote
,
with an error.
Parameters | box | an AmpBox
with a value for its ERROR , ERROR_CODE , and
ERROR_DESCRIPTION keys.
|
Parameters | box | an AmpBox
with a value for its COMMAND and ASK keys.
|
Parameters | box | an AmpBox |
Raises | NoEmptyBoxes | when a box is received that does not contain an '_answer', '_command' / '_ask', or '_error' key; i.e. one which does not fit into the command / response protocol defined by AMP. |
A box with a _command key was received.
Dispatch it to a local handler call it.Parameters | proto | an AMP instance. |
box | an AmpBox to be dispatched. |