private void  fromJSONRequestInfo(JSONValue json_value, bool ignore_extras)
        {
            Debug.Assert(json_value != null);
            RequestInfoJSON convert_classy = RequestInfoJSON.from_json(json_value, ignore_extras, true);

            setRequestInfo(convert_classy);
        }
        public ICustomActivityResult Execute()
        {
            HoundCloudRequester requester = new HoundCloudRequester(client_id, client_key, user_id);

            RequestInfoJSON.TypeClientVersion client_version = new RequestInfoJSON.TypeClientVersion();
            client_version.key     = 0;
            client_version.choice0 = "1.0";

            RequestInfoJSON request_info = new RequestInfoJSON();

            request_info.setUnitPreference(RequestInfoJSON.TypeUnitPreference.UnitPreference_US);
            request_info.setRequestID(Guid.NewGuid().ToString());
            request_info.setSessionID("");
            request_info.setClientVersion(client_version);


            ConversationStateJSON conversation_state = null;


            HoundServerJSON hound_result;

            hound_result = requester.do_text_request(request_text, conversation_state, request_info);
            CommandResultJSON commandResult = hound_result.elementOfAllResults(0);


            String resultStr = commandResult.getWrittenResponseLong();

            return(this.GenerateActivityResult(resultStr));
        }
Esempio n. 3
0
    public override HoundServerJSON do_text_request(string query,
                                                    ConversationStateJSON conversation_state,
                                                    RequestInfoJSON request_info)
    {
        string url =
            text_request_url_base + "?query=" + Uri.EscapeUriString(query);
        Fetch fetcher = new Fetch(url);

        set_up_fetch(fetcher, conversation_state, request_info);
        try
        {
            HoundServerJSON.HoldingGenerator generator =
                new HoundServerJSON.HoldingGenerator(
                    "the result from the Hound server");
            ResultHandler handler = new ResultHandler(generator);
            fetcher.get(handler);
            return(generator.value);
        }
        catch (Exception e1)
        {
            Console.Error.Write("Error trying to fetch from `{0}': {1}\n", url,
                                e1.Message);
            return(null);
        }
    }
 public void setRequestInfo(RequestInfoJSON new_value)
 {
     if (flagHasRequestInfo)
     {
     }
     flagHasRequestInfo = true;
     storeRequestInfo   = new_value;
 }
Esempio n. 5
0
    public override VoiceRequest start_voice_request(
        ConversationStateJSON conversation_state,
        RequestInfoJSON request_info, PartialHandler partial_handler)
    {
        Fetch fetcher = new Fetch(voice_request_url_base);

        set_up_fetch(fetcher, conversation_state, request_info);
        return(new LocalVoiceRequest(fetcher, partial_handler));
    }
Esempio n. 6
0
    void Start()
    {
        // This is a workaround for the game to work on a system that's not on English
        System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

        HoundCloudRequester requester = new HoundCloudRequester(Settings.Instance.clientId, Settings.Instance.clientKey, Settings.Instance.userId);

        RequestInfoJSON.TypeClientVersion client_version = new RequestInfoJSON.TypeClientVersion();
        client_version.key     = 0;
        client_version.choice0 = "1.0";

        // RequestInfoJSON class contains metadata about the current request, like session_id, request id, client_version, etc
        RequestInfoJSON request_info = new RequestInfoJSON();

        request_info.setUnitPreference(RequestInfoJSON.TypeUnitPreference.UnitPreference_US);
        request_info.setRequestID(Guid.NewGuid().ToString());
        request_info.setClientVersion(client_version);


        // We need these to lines to get the vocalized intro of the game. The parameter Claire sets the voice type
        // and we need to set the ResponseAudioShortOrLong field to tell the API we want it to vocalize the answer
        request_info.setResponseAudioVoice("Claire");
        request_info.setResponseAudioShortOrLong(RequestInfoJSON.stringToResponseAudioShortOrLong("Long"));

        // The HoundServerJSON class is used to handle all server responses
        HoundServerJSON hound_result;

        hound_result = requester.do_text_request("speak_this", null, request_info);
        CommandResultJSON my_answer   = hound_result.getAllResults()[0];
        string            bytes_audio = my_answer.getResponseAudioBytes();

        byte[] bytes = System.Convert.FromBase64String(bytes_audio);

        // Play the clip back
        audioSource = GetComponent <AudioSource>();

        Debug.Log("Intro started...");

        WAV       wav       = new WAV(bytes);
        AudioClip audioClip = AudioClip.Create("testSound", wav.SampleCount, 1, wav.Frequency, false, false);

        audioClip.SetData(wav.LeftChannel, 0);
        audioSource.clip = audioClip;
        audioSource.Play();

        Debug.Log("Intro finished!");
    }
Esempio n. 7
0
    void Start()
    {
        requester = new HoundCloudRequester(Settings.Instance.clientId, Settings.Instance.clientKey, Settings.Instance.userId);

        audioSource = GetComponent <AudioSource>();
        request_info.setUnitPreference(RequestInfoJSON.TypeUnitPreference.UnitPreference_US);

        //We need to set this flag so the answers of the characters are vocalized
        request_info.setResponseAudioShortOrLong(RequestInfoJSON.stringToResponseAudioShortOrLong("Long"));

        client_version.key     = 0;
        client_version.choice0 = "1.0";
        request_info.setClientVersion(client_version);

        // RequestInfoJSON class contains metadata about the current request, like session_id, request id, client_version, etc
        request_info.setRequestID(Guid.NewGuid().ToString());
        request_info.setStoredGlobalPagesToMatch(character_pages);
    }
Esempio n. 8
0
 public abstract VoiceRequest start_voice_request(
     ConversationStateJSON conversation_state,
     RequestInfoJSON request_info,
     PartialHandler partial_handler = null);
Esempio n. 9
0
 public abstract HoundServerJSON do_text_request(string query,
                                                 ConversationStateJSON conversation_state,
                                                 RequestInfoJSON request_info);
Esempio n. 10
0
    public static int sample_hound_driver(HoundRequester requester)
    {
        string session_id = Guid.NewGuid().ToString();
        ConversationStateJSON conversation_state = null;

        while (true)
        {
            string line = Console.ReadLine();
            if (line == null)
            {
                return(0);
            }
            RequestInfoJSON request_info = new RequestInfoJSON();
            request_info.setUnitPreference(
                RequestInfoJSON.TypeUnitPreference.UnitPreference_US);
            request_info.setRequestID(Guid.NewGuid().ToString());
            request_info.setSessionID(session_id);
            RequestInfoJSON.TypeClientVersion client_version =
                new RequestInfoJSON.TypeClientVersion();
            client_version.key     = 0;
            client_version.choice0 = "1.0";
            request_info.setClientVersion(client_version);

            HoundServerJSON hound_result;
            if ((line.StartsWith("-audio ")) ||
                (line.StartsWith("-transcript-audio ")) ||
                (line.StartsWith("-slow-transcript-audio ")))
            {
                bool go_slowly       = line.StartsWith("-slow-transcript-audio ");
                bool show_transcript =
                    (line.StartsWith("-transcript-audio ") ||
                     line.StartsWith("-slow-transcript-audio "));
                LocalPartialHandler partial_handler =
                    new LocalPartialHandler(show_transcript);
                HoundRequester.VoiceRequest request =
                    requester.start_voice_request(conversation_state,
                                                  request_info, partial_handler);
                int file_name_position = 0;
                while (line[file_name_position] != ' ')
                {
                    ++file_name_position;
                }
                ++file_name_position;
                String       file_name = line.Substring(file_name_position);
                BinaryReader audio_stream;
                try
                {
                    audio_stream = new BinaryReader(
                        File.Open(file_name, FileMode.Open));
                }
                catch (Exception e1)
                {
                    Console.Error.Write(
                        "Error trying to open audio file `{0}': {1}\n",
                        file_name, e1.Message);
                    return(1);
                }
                while (true)
                {
                    byte[] buffer     = new byte[2052];
                    int    byte_count = audio_stream.Read(buffer, 0, 2052);
                    if (byte_count > 0)
                    {
                        request.add_audio(byte_count, buffer);
                    }
                    if (byte_count < 2052)
                    {
                        break;
                    }
                    if (go_slowly)
                    {
                        Thread.Sleep(500);
                    }
                }
                audio_stream.Close();
                hound_result = request.finish();
            }
            else
            {
                hound_result = requester.do_text_request(line,
                                                         conversation_state, request_info);
            }

            if (hound_result == null)
            {
                return(1);
            }

            if (hound_result.hasAllResults())
            {
                if (hound_result.countOfAllResults() == 0)
                {
                    Console.Write("No match.\n");
                    conversation_state = null;
                }
                else
                {
                    CommandResultJSON command =
                        hound_result.elementOfAllResults(0);
                    Console.Write("Result");
                    if (hound_result.hasLocalOrRemote())
                    {
                        Console.Write(" [{0}]",
                                      ((hound_result.getLocalOrRemote() ==
                                        HoundServerJSON.TypeLocalOrRemote.
                                        LocalOrRemote_Local) ? "Local" :
                                       "Remote"));
                    }
                    Console.Write(": {0}\n", command.getWrittenResponseLong());
                    if (command.hasConversationState())
                    {
                        conversation_state = command.getConversationState();
                    }
                    else
                    {
                        conversation_state = null;
                    }
                }
            }
            else if (hound_result.hasErrorMessage())
            {
                Console.Write("Error from server: {0}\n",
                              hound_result.getErrorMessage());
                conversation_state = null;
            }
            else
            {
                Console.Write("No result or error from server.\n");
                conversation_state = null;
            }
        }
    }
Esempio n. 11
0
    private void set_up_fetch(Fetch fetcher,
                              ConversationStateJSON conversation_state,
                              RequestInfoJSON request_info)
    {
        fetcher.setUserAgent("HoundCloudRequesterCSharp/1.0");

        if (use_proxy)
        {
            fetcher.setProxyServer(proxy_server, proxy_port);
            int param_count = proxy_parameters.Count;
            for (int param_num = 0; param_num < param_count; ++param_num)
            {
                fetcher.setProxyParameter(proxy_parameters[param_num].key,
                                          proxy_parameters[param_num].value);
            }
        }

        long time_stamp =
            (long)((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).
                   TotalSeconds);

        request_info.setTimeStamp(time_stamp);
        if (conversation_state != null)
        {
            request_info.setConversationState(conversation_state);
        }
        string request_id = request_info.getRequestID();

        request_info.setUserID(user_id);
        request_info.setClientID(client_id);
        request_info.setPartialTranscriptsDesired(true);
        request_info.setObjectByteCountPrefix(false);
        request_info.setResultVersionAccepted(1.1);
        request_info.setSDK("C Sharp");
        {
            JSONObjectValue sdk_info = new JSONObjectValue();
            sdk_info.setField("SDKVariant",
                              new JSONStringValue(BuildInfo.SDKVariant));
            sdk_info.setField("SDKPrivateDomains",
                              new JSONStringValue(BuildInfo.SDKPrivateDomains));
            sdk_info.setField("BuildUser",
                              new JSONStringValue(BuildInfo.BuildUser));
            sdk_info.setField("BuildDate",
                              new JSONStringValue(BuildInfo.BuildDate));
            sdk_info.setField("BuildMachine",
                              new JSONStringValue(BuildInfo.BuildMachine));
            sdk_info.setField("BuildSVNRevision",
                              new JSONStringValue(BuildInfo.BuildSVNRevision));
            sdk_info.setField("BuildSVNBranch",
                              new JSONStringValue(BuildInfo.BuildSVNBranch));
            sdk_info.setField("BuildNumber",
                              new JSONStringValue(BuildInfo.BuildNumber));
            sdk_info.setField("BuildKind",
                              new JSONStringValue(BuildInfo.BuildKind));
            sdk_info.setField("BuildVariant",
                              new JSONStringValue(BuildInfo.BuildVariant));
            request_info.setSDKInfo(sdk_info);
        }
        StringWriter     request_info_stream = new StringWriter();
        JSONStreamWriter request_info_writer = new JSONStreamWriter(
            request_info_stream,
            JSONWriter.whitespace_style.WHITESPACE_NONE);

        request_info.write_as_json(request_info_writer);
        fetcher.setParameter("Hound-Request-Info",
                             request_info_stream.ToString());

        string auth_id = user_id + ";" + request_id;

        fetcher.setParameter("Hound-Request-Authentication", auth_id);

        byte[]     key_bits     = Base64.base64url_decode(client_key);
        HMACSHA256 sha_256_hmac = new HMACSHA256(key_bits);

        byte[] hash_result = sha_256_hmac.ComputeHash(
            Encoding.UTF8.GetBytes(
                String.Format("{0}{1}", auth_id, time_stamp)));

        fetcher.setParameter("Hound-Client-Authentication",
                             client_id + ";" + String.Format("{0}", time_stamp) + ";" +
                             new String(Base64.base64url_encode(hash_result)));

        if (request_info.hasInputLanguageEnglishName())
        {
            fetcher.setParameter("Hound-Input-Language-English-Name",
                                 request_info.getInputLanguageEnglishName());
        }
        if (request_info.hasInputLanguageNativeName())
        {
            fetcher.setParameter("Hound-Input-Language-Native-Name",
                                 request_info.getInputLanguageNativeName());
        }
        if (request_info.hasInputLanguageIETFTag())
        {
            fetcher.setParameter("Hound-Input-Language-IETF-Tag",
                                 request_info.getInputLanguageIETFTag());
        }

        fetcher.setTimeoutSeconds(30);
    }