'The main method that gets called for replying. This starts up an
asynchronous reply thread and returns.'

def _reply(self, private_key, msg_id, response):

    self._update_last_activity_time(private_key)
    if (private_key in self._private_keys):
        self._launch_thread(target=self._reply_, args=(private_key, msg_id, response))
    else:
        raise SAMPProxyError(5, u'Private-key    {}    expired    or    invalid.'.format(private_key))
    return {}
