'A remote message has been received.  Dispatch it appropriately.
The default implementation is to dispatch to a method called
\'C{observe_messagename}\' and call it on my  with the same arguments.'

def remoteMessageReceived(self, broker, message, args, kw):

    if (not isinstance(message, str)):
        message = message.decode('utf8')
    args = broker.unserialize(args)
    kw = broker.unserialize(kw)
    method = getattr(self, ('observe_%s' % message))
    try:
        state = method(*args, **kw)
    except TypeError:
        log.msg(("%s    didn't    accept    %s    and    %s" % (method, args, kw)))
        raise
    return broker.serialize(state, None, method, args, kw)
