示例#1
0
        /// <summary>
        /// JavaScript経由でWebページの値を取得する。
        /// </summary>
        /// <param name="func">値取得後に実行する処理。</param>
        /// <param name="valueRawStr">メソッドの引数として記述する文字列。JavaScriptが記述可能。</param>
        /// <param name="dummy">WebGLで実行していない場合にダミーで渡すWebページの値。</param>
        /// <returns>実行結果。</returns>
        public IEnumerator GetWebPageValue(AfterGetDelegate <string> func, string valueRawStr, string dummy = null)
        {
            // 一意なIDを生成し、値取得後に実行する処理をプロパティに記録
            int    id      = Interlocked.Increment(ref this.idCounter);
            string command = this.MakeSendMessageForGetWebPageValueEnd(id, valueRawStr);

            Debug.Log(command + " called.");
            if (!this.IsWeb())
            {
                Debug.Log("WebGL環境外。ダミー処理を実行します。");
                func(dummy);
            }
            else
            {
                // JavaScript経由でGetWebPageValueEndに結果を送信。結果が来るまで待つ
                Application.ExternalEval(command);
                int counter = 0;
                while (!this.results.ContainsKey(id))
                {
                    if (++counter > TimeOut)
                    {
                        throw new IOException("Webページが応答しません");
                    }

                    yield return(null);
                }

                // 取得した結果で後処理を実行
                func(this.results[id]);
                this.results.Remove(id);
            }
        }
示例#2
0
 /// <summary>
 /// WebGL実行時に認証トークンを取得する。
 /// </summary>
 /// <param name="func">取得結果を受け取るデリゲート。</param>
 /// <returns>処理結果。</returns>
 public IEnumerator GetAuthToken(AfterGetDelegate <string> func)
 {
     if (!this.IsWeb())
     {
         func(this.DummyAuthToken);
     }
     else
     {
         yield return(this.GetLocalStorage(
                          TokenKey,
                          (token) =>
         {
             // ダブルクオーテーションで囲まれた文字列で来るので中身を渡す
             // ※ "null" が文字列で来たりもしているのでその場合消す
             if (token == null || token == "null")
             {
                 func(null);
             }
             else
             {
                 func(token.Trim('"'));
             }
         }));
     }
 }
示例#3
0
 /// <summary>
 /// WebGL実行時に言語設定を取得する。
 /// </summary>
 /// <param name="func">取得結果を受け取るデリゲート。</param>
 /// <returns>処理結果。</returns>
 public IEnumerator GetLanguage(AfterGetDelegate <string> func)
 {
     if (!this.IsWeb())
     {
         func(string.Empty);
     }
     else
     {
         yield return(this.GetUrl((url) =>
         {
             var param = ParseQuery(url);
             string lang;
             if (param.TryGetValue("lang", out lang))
             {
                 func(lang);
             }
         }));
     }
 }
示例#4
0
        /// <summary>
        /// WebGL実行時にCookie情報を取得する。
        /// </summary>
        /// <param name="func">取得結果を受け取るデリゲート。</param>
        /// <returns>実行結果。</returns>
        public IEnumerator GetCookies(AfterGetDelegate <IDictionary <string, string> > func)
        {
            // Cookieの内容を受け取り側メソッドに送信させる
            yield return(this.GetWebPageValue(
                             (allCookies) =>
            {
                IDictionary <string, string> cookies = new Dictionary <string, string>();
                foreach (string cookieStr in allCookies.Split(';'))
                {
                    string[] keyAndValue = cookieStr.Split('=');
                    if (keyAndValue.Length >= 2)
                    {
                        cookies[keyAndValue[0]] = keyAndValue[1];
                    }
                }

                func(cookies);
            },
                             "(document.cookie || '')"));
        }
示例#5
0
 /// <summary>
 /// WebGL実行時にステージIDを取得する。
 /// </summary>
 /// <param name="func">取得結果を受け取るデリゲート。</param>
 /// <returns>処理結果。</returns>
 public IEnumerator GetStageId(AfterGetDelegate <int> func)
 {
     if (!this.IsWeb())
     {
         func(this.DummyStageId);
     }
     else
     {
         yield return(this.GetUrl((url) =>
         {
             var param = ParseQuery(url);
             int id;
             string idStr;
             if (param.TryGetValue("stage_id", out idStr) && int.TryParse(idStr, out id))
             {
                 func(id);
             }
         }));
     }
 }
示例#6
0
 /// <summary>
 /// WebGL実行時にページURL情報を取得する。
 /// </summary>
 /// <param name="func">取得結果を受け取るデリゲート。</param>
 /// <returns>実行結果。</returns>
 public IEnumerator GetUrl(AfterGetDelegate <string> func)
 {
     // ページのURLを受け取り側メソッドに送信させる
     yield return(this.GetWebPageValue(func, "window.location.href", "http://localhost/"));
 }
示例#7
0
 /// <summary>
 /// WebGL実行時にローカルストレージ情報を取得する。
 /// </summary>
 /// <param name="key">ローカルストレージのキー。</param>
 /// <param name="func">取得結果を受け取るデリゲート。</param>
 /// <returns>実行結果。</returns>
 public IEnumerator GetLocalStorage(string key, AfterGetDelegate <string> func)
 {
     // ローカルストレージの内容を受け取り側メソッドに送信させる
     yield return(this.GetWebPageValue(func, "(window.localStorage.getItem('" + key + "') || '')"));
 }