An AMP-formatted message was received.  Dispatch to the appropriate
        command responder, i.e. a method on this object exposed with
        L{commandMethod.expose}.

        @see IMessageReceiver.messageReceived

def messageReceived(self, value, sender, target):
        """
        An AMP-formatted message was received.  Dispatch to the appropriate
        command responder, i.e. a method on this object exposed with
        L{commandMethod.expose}.

        @see IMessageReceiver.messageReceived
        """
        if value.type != AMP_MESSAGE_TYPE:
            raise UnknownMessageType()
        inputBox = self._boxFromData(value.data)
        thunk = commandMethod.responderForName(self, inputBox[COMMAND])
        placeholder = _ProtocolPlaceholder(sender, target)
        arguments = thunk.command.parseArguments(inputBox, placeholder)
        try:
            result = thunk(**arguments)
        except tuple(thunk.command.errors.keys()), knownError:
            errorCode = thunk.command.errors[knownError.__class__]
            raise RevertAndRespond(
                Value(AMP_ANSWER_TYPE,
                         Box(_error_code=errorCode,
                             _error_description=str(knownError)).serialize()))
        else:
            response = thunk.command.makeResponse(result, None)
            return Value(AMP_ANSWER_TYPE, response.serialize())