Exemple #1
0
 /// <summary>
 /// ログインの結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="error">エラーの有無</param>
 private void setLogInError(NCMBException error)
 {
     if (error == null)
     {
         Application.LoadLevel("firstScene");
     }
 }
        private IEnumerator SendScoreEnumerator()
        {
            this.sendScoreButton.interactable = false;
            this.highScoreLabel.text          = "送信中...";

            //ハイスコア送信
            if (this.highScoreSpreadSheetObject == null)
            {
                this.highScoreSpreadSheetObject          = new NCMBObject(RankingDataClassName);
                this.highScoreSpreadSheetObject.ObjectId = ObjectID;
            }

            this.highScoreSpreadSheetObject ["name"]    = this.InputtedNameForSave;
            this.highScoreSpreadSheetObject ["hiscore"] = RankingLoader.Instance.Score.Value;
            NCMBException errorResult = null;

            yield return(this.highScoreSpreadSheetObject.YieldableSaveAsync(error => errorResult = error));

            if (errorResult != null)                //NCMBのコンソールから直接削除した場合に、該当のobjectIdが無いので発生する(らしい)
            {
                highScoreSpreadSheetObject.ObjectId = null;
                yield return(this.highScoreSpreadSheetObject.YieldableSaveAsync(error => errorResult = error));                 //新規として送信
            }

            //ObjectIDを保存して次に備える
            ObjectID = this.highScoreSpreadSheetObject.ObjectId;

            this.highScoreLabel.text = RankingLoader.Instance.Score.TextForDisplay;

            yield return(StartCoroutine(LoadRankingBoard()));
        }
Exemple #3
0
    public IEnumerator SetHighRankingTexts(int missionIndex)
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("Mission" + (missionIndex + 1).ToString());
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        if (missionIndex != 3)
        {
            query.OrderByAscending("ClearTime");                    //昇順
        }
        else
        {
            query.OrderByDescending("ClearTime");  //降順
        }
        query.Limit = 10;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            this.SetHighRankingTexts(result, missionIndex);
        }
    }
Exemple #4
0
    public IEnumerator SetHighRankingTextFromClearResult()
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>(SceneManager.GetActiveScene().name);
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        query.OrderByAscending("ClearTime"); //昇順
        query.Limit = 10;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            this.SetHighRankingTextFromClearResult(result);
        }
        else
        {
            Debug.Log(error);
        }
    }
Exemple #5
0
        IEnumerator Save(GameSaveData data)
        {
            PlaySaveData = data;
            if (m_recordObject == null)
            {
                m_recordObject          = new NCMBObject(NCMB_CLASSNAME);
                m_recordObject.ObjectId = ObjectID;
            }

            m_recordObject = ConvertPlayerData2NCMB(data, m_recordObject);

            NCMBException errorResult = null;

            yield return(m_recordObject.YieldableSaveAsync(error => errorResult = error));

            if (errorResult != null)
            {
                //NCMBのコンソールから直接削除した場合に、該当のobjectIdが無いので発生する(らしい)
                m_recordObject.ObjectId = null;
                yield return(m_recordObject.YieldableSaveAsync(error => errorResult = error)); //新規として送信
            }

            //ObjectIDを保存して次に備える
            ObjectID = m_recordObject.ObjectId;
        }
        private IEnumerator SendScoreEnumerator()
        {
            sendScoreButton.interactable = false;
            highScoreLabel.text          = "送信中...";

            //ハイスコア送信
            if (_ncmbRecord == null)
            {
                _ncmbRecord          = new NCMBObject(_board.ClassName);
                _ncmbRecord.ObjectId = ObjectID;
            }

            _ncmbRecord[COLUMN_NAME]  = InputtedNameForSave;
            _ncmbRecord[COLUMN_SCORE] = _lastScore.Value;
            NCMBException errorResult = null;

            yield return(_ncmbRecord.YieldableSaveAsync(error => errorResult = error));

            if (errorResult != null)
            {
                //NCMBのコンソールから直接削除した場合に、該当のobjectIdが無いので発生する(らしい)
                _ncmbRecord.ObjectId = null;
                yield return(_ncmbRecord.YieldableSaveAsync(error => errorResult = error)); //新規として送信
            }

            //ObjectIDを保存して次に備える
            ObjectID = _ncmbRecord.ObjectId;

            highScoreLabel.text = _lastScore.TextForDisplay;

            yield return(StartCoroutine(LoadRankingBoard()));
        }
Exemple #7
0
 /// <summary>
 /// ログアウトの結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="error">エラーの有無</param>
 private void setLogOutError(NCMBException error)
 {
     if (error == null)
     {
         Application.LoadLevel("LogIn");
     }
 }
        private void _signatureCheck(string responseSignature, ref int statusCode, ref string responseData, ref byte[] responseByte, ref NCMBException error)
        {
            //hashデータ作成
            StringBuilder stringHashData = _makeSignatureHashData();

            //レスポンスデータ追加 Delete時はレスポンスデータが無いためチェックする
            if (responseData != null && responseData != "")
            {
                stringHashData.Append("\n" + responseData);
            }
            else if (responseByte != null)
            {
                stringHashData.Append("\n" + AsHex(responseByte));
            }

            //シグネチャ再生成
            string responseMakeSignature = _makeSignature(stringHashData.ToString());

            //レスポンスシグネチャと生成したシグネチャが違う場合はエラー
            if (responseSignature != responseMakeSignature)
            {
                statusCode         = 100;
                responseData       = "{}";
                error              = new NCMBException();
                error.ErrorCode    = "E100001";
                error.ErrorMessage = "Authentication error by response signature incorrect.";
            }
            NCMBDebug.Log("【responseSignature】 " + responseSignature);
            NCMBDebug.Log("【responseMakeSignature】 " + responseMakeSignature);
        }
        /// <summary>
        /// ハイスコア送信
        /// </summary>
        /// <param name="name"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public async UniTask SendScoreAsync(string name, Dictionary <string, int> data)
        {
            // ハイスコア送信
            if (_ncmbRecord == null)
            {
                _ncmbRecord = new NCMBObject(_className)
                {
                    ObjectId = ObjectID
                };
            }

            _ncmbRecord[ColumnName] = name;

            foreach (var row in data)
            {
                _ncmbRecord[row.Key] = row.Value;
            }

            NCMBException errorResult = null;

            await _ncmbRecord.YieldableSaveAsync(error => errorResult = error);

            if (errorResult != null)
            {
                _ncmbRecord.ObjectId = null;
                await _ncmbRecord.YieldableSaveAsync(error => errorResult = error);
            }

            ObjectID = _ncmbRecord.ObjectId;
        }
Exemple #10
0
    public IEnumerator SetHighRankingTextFromFailedResult()
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>(SceneManager.GetActiveScene().name);
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        if (TimeManager.Instance.CountTimeType == E_CountTimeType.CountUp)
        {
            query.OrderByAscending("ClearTime");                                                                //昇順
        }
        else
        {
            query.OrderByDescending("ClearTime");  //降順
        }
        query.Limit = 10;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            this.SetHighRankingTextFromFailedResult(result);
        }
    }
Exemple #11
0
 private void setUserScore(int score, NCMBException error)
 {
     if (error == null)
     {
         if (score != 0)
         {
             bestScore = score.ToString();
         }
     }
 }
Exemple #12
0
 /// <summary>
 /// 総ユーザ数の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="count">総ユーザ数</param>
 /// <param name="error">エラーの有無</param>
 private void setTotalPlayers(int count, NCMBException error)
 {
     if (error == null)
     {
         if (count != 0)
         {
             totalPlayer = count.ToString();
         }
     }
 }
Exemple #13
0
 /// <summary>
 /// 現在のユーザの順位の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="count">現在のユーザの順位</param>
 /// <param name="error">エラーの有無</param>
 private void setCurrentRank(int count, NCMBException error)
 {
     if (error == null)
     {
         if (count != 0)
         {
             currentRank = count.ToString();
         }
     }
 }
Exemple #14
0
 /// <summary>
 /// ランキング取得の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="objList">ランキング一覧</param>
 /// <param name="error">エラーの有無</param>
 private void setRankingList(List <NCMBObject> objList, NCMBException error)
 {
     if (error == null)
     {
         rankersList = objList;
     }
     else
     {
         Debug.Log(error.Message);
     }
 }
Exemple #15
0
    /// <summary>
    /// 特定のデータに着目したランキング上位10名のデータを取得
    /// </summary>
    /// <param name="orderType">どのデータのランキングを取得するか</param>
    /// <param name="onGet">データ取得時の処理</param>
    /// <returns></returns>
    public IEnumerator GetRanking(E_UserData orderType, Action <List <NetworkUserData> > onGet)
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("User");
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        switch (orderType)
        {
        case E_UserData.HighScore:
            query.OrderByDescending("HighScore");     //降順
            break;

        case E_UserData.TotalGoalToEnemyCount:
            query.OrderByDescending("TotalGoalToEnemyCount");     //降順
            break;

        case E_UserData.TotalPlayCount:
            query.OrderByDescending("TotalPlayCount");     //降順
            break;

        case E_UserData.TotalScore:
            query.OrderByDescending("TotalScore");     //降順
            break;
        }

        query.Limit = 10;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        if (error == null)
        {
            List <NetworkUserData> userData = new List <NetworkUserData>();
            foreach (NCMBObject res in result)
            {
                userData.Add(new NetworkUserData(res));
            }
            onGet(userData);
        }
        else
        {
            Debug.Log(error);
        }
    }
Exemple #16
0
    /// <summary>
    /// 1回のゲームの結果をサーバーに保存する
    /// </summary>
    /// <param name="objectId">PlayerPrefs("AccountToken")</param>
    /// <param name="scoreThisTime">今回の獲得スコア</param>
    /// <param name="goalCountToEnemyThisTime">今回の敵ゴール数</param>
    /// <param name="onUpdate">結果の保存終了時の処理</param>
    /// <returns></returns>
    public IEnumerator UpdatePlayerDataOnFinishOneGame(string objectId, int scoreThisTime, int goalCountToEnemyThisTime, Action onUpdate)
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("User");
        NCMBObject             result = null;
        NCMBException          error  = null;

        query.GetAsync(objectId, (NCMBObject _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            result["TotalScore"]            = scoreThisTime + int.Parse(result["TotalScore"].ToString());
            result["TotalPlayCount"]        = int.Parse(result["TotalPlayCount"].ToString()) + 1;
            result["TotalGoalToEnemyCount"] = goalCountToEnemyThisTime + int.Parse(result["TotalGoalToEnemyCount"].ToString());
            if (int.Parse(result["HighScore"].ToString()) < scoreThisTime)
            {
                result["HighScore"] = scoreThisTime;
            }

            bool isComplete = false;
            result.SaveAsync(e =>
            {
                if (e != null)
                {
                    Debug.Log(e);
                    return;
                }
                else
                {
                    isComplete = true;
                }
            });

            yield return(new WaitUntil(() => isComplete));

            onUpdate();
        }
        else
        {
            Debug.Log(error);
        }
    }
        //ファイルデータ送信
        private HttpWebRequest _sendRequestForFile(HttpWebRequest req, ref NCMBException error)
        {
            Stream stream = null;

            try {
                stream = req.GetRequestStream();
                string newLine     = "\r\n";
                string boundary    = "_NCMBBoundary";
                string formData    = "--" + boundary + newLine;
                byte[] endBoundary = Encoding.Default.GetBytes(newLine + "--" + boundary + "--");


                formData += "Content-Disposition: form-data; name=\"file\"; filename=" + Uri.EscapeUriString(_file.FileName) + newLine;
                formData += "Content-Type: " + MimeTypeMap.GetMimeType(System.IO.Path.GetExtension(_file.FileName)) + newLine + newLine;
                byte[] fileFormData = Encoding.Default.GetBytes(formData);
                stream.Write(fileFormData, 0, fileFormData.Length);
                if (_file.FileData != null)
                {
                    stream.Write(_file.FileData, 0, _file.FileData.Length);
                }

                // ACL更新処理
                if (_file.ACL != null && _file.ACL._toJSONObject().Count > 0)
                {
                    string aclString = Json.Serialize(_file.ACL._toJSONObject());
                    formData  = newLine + "--" + boundary + newLine;
                    formData += "Content-Disposition: form-data; name=acl; filename=acl" + newLine + newLine;
                    formData += aclString;
                    byte[] aclFormData = Encoding.Default.GetBytes(formData);
                    stream.Write(aclFormData, 0, aclFormData.Length);
                }

                stream.Write(endBoundary, 0, endBoundary.Length);
            } catch (SystemException cause) {
                //エラー処理
                error = new NCMBException(cause);
            } finally {
                if (stream != null)
                {
                    stream.Close();
                }
            }
            return(req);
        }
        /*
         * //通信処理(非同期通)
         * internal void ConnectAsync (HttpClientCallback callback)
         * {
         *      //証明書更新 更新しないとSSLサイトにアクセス出来ない
         *      ServicePointManager.ServerCertificateValidationCallback = delegate {
         *              return true;
         *      };
         *      //リクエストの作成
         *      HttpWebRequest req = _returnRequest ();
         *      //非同期データ送信 BeginGetRequestStreamでくくらなければ同期通信
         *      if (_method == ConnectType.POST || _method == ConnectType.PUT) {
         *              //リクエスト非同期処理
         *              IAsyncResult requestResult = req.BeginGetRequestStream (ar => {
         *                      Stream postStream = req.EndGetRequestStream (ar);                //非同期要求を終了
         *                      byte[] postDataBytes = Encoding.Default.GetBytes (_content);    //送信データ作成。バイト型配列に変換
         *                      postStream.Write (postDataBytes, 0, postDataBytes.Length);      //送信
         *                      postStream.Close ();                                           //リリース
         *                      IAsyncResult responsResult = req.BeginGetResponse (ar2 => {
         *                              HttpWebResponse response = (HttpWebResponse)req.EndGetResponse (ar2); //非同期要求を終了
         *                              Stream streamResponse = response.GetResponseStream (); //応答データを受信するためのStreamを取得
         *                              int statusCode = (int)response.StatusCode; //ステータスコード取得
         *                              StreamReader streamRead = new StreamReader (streamResponse); //レスポンスデータ取得
         *                              string responseData = streamRead.ReadToEnd ();
         *                              // 閉じる.リリース
         *                              streamResponse.Close ();
         *                              streamRead.Close ();
         *                              response.Close ();
         *                              callback (statusCode, responseData, null);//コールバックを返す
         *                      }, null);
         *              }, null);
         *      } else if (_method == ConnectType.GET || _method == ConnectType.DELETE) {  //コールバックをメソッドにしなくてもこう言う書き方も有りです
         *              IAsyncResult responseResult = req.BeginGetResponse (ar => {
         *                      try {
         *                              HttpWebResponse res = (HttpWebResponse)req.EndGetResponse (ar);
         *                              int statusCode = (int)res.StatusCode;
         *                              Stream streamResponse = res.GetResponseStream ();
         *                              StreamReader streamRead = new StreamReader (streamResponse); //レスポンスデータ取得
         *                              string responseData = streamRead.ReadToEnd ();
         *                              callback (statusCode, responseData, null);
         *                      } catch (WebException e) {
         *                              NCMBDebug.LogError ("失敗error:" + e);
         *                      }
         *              }, null);
         *      }
         * }
         */
        //同期データ送信
        private HttpWebRequest _sendRequest(HttpWebRequest req, ref NCMBException error)
        {
            byte[] postDataBytes = Encoding.Default.GetBytes(_content);
            Stream stream        = null;

            try {
                stream = req.GetRequestStream();
                stream.Write(postDataBytes, 0, postDataBytes.Length);
            } catch (SystemException cause) {
                //エラー処理
                error = new NCMBException(cause);
            } finally {
                if (stream != null)
                {
                    stream.Close();
                }
            }
            return(req);
        }
Exemple #19
0
        //同期データ送信
        private HttpWebRequest _sendRequest(HttpWebRequest req, ref NCMBException error)
        {
            byte[] postDataBytes = Encoding.Default.GetBytes(_content);
            Stream stream        = null;

            try {
                stream = req.GetRequestStream();
                stream.Write(postDataBytes, 0, postDataBytes.Length);
            } catch (WebException ex) {
                error = new NCMBException();
                error.ErrorMessage = ex.Message;
                error.ErrorCode    = ((int)ex.Status).ToString();
            } finally {
                if (stream != null)
                {
                    stream.Close();
                }
            }
            return(req);
        }
Exemple #20
0
    /// <summary>
    /// 端末ごとに保存されているobjectIdによって、アカウントデータを取得する
    /// </summary>
    /// <param name="objectId">端末ごとにPlayerPrefs("AccountToken")によって保存されたId</param>
    /// <param name="action">dataを取ってきた際の処理</param>
    /// <returns></returns>
    public IEnumerator GetUserData(string objectId, Action <NetworkUserData> action)
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("User");
        NCMBObject             result = null;
        NCMBException          error  = null;

        query.GetAsync(objectId, (NCMBObject _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            action(new NetworkUserData(result));
        }
    }
Exemple #21
0
    /// <summary>
    /// PlayerNameの変更
    /// </summary>
    /// <param name="playerNameAfterChange"></param>
    /// <param name="objectId">PlayerPrefs("AccountToken")</param>
    /// <param name="onUpdate"></param>
    /// <returns></returns>
    public IEnumerator UpdatePlayerName(string playerNameAfterChange, string objectId, Action onUpdate)
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("User");
        NCMBObject             result = null;
        NCMBException          error  = null;

        query.GetAsync(objectId, (NCMBObject _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            result["PlayerName"] = playerNameAfterChange;
            result.Save(); //非同期通信にしてもいいかも
            onUpdate();
        }
    }
Exemple #22
0
    /// <summary>
    /// スコア送信コルーチン
    /// </summary>
    /// <param name="rankingBoard"></param>
    /// <param name="ncmbObject"></param>
    /// <param name="onCompleted"></param>
    /// <returns></returns>
    private IEnumerator DoSendScore(RankingInfo rankingBoard, NCMBObject ncmbObject, UnityAction <NCMBObject> onCompleted)
    {
        Debug.Log("スコア送信中...");

        NCMBException errorResult = null;

        yield return(ncmbObject.YieldableSaveAsync(error => errorResult = error));

        if (errorResult != null)
        {
            // NCMBのコンソールから直接削除した場合に、該当のobjectIdが無いので発生する(らしい)
            // 新規として送信
            ncmbObject.ObjectId = null;
            yield return(ncmbObject.YieldableSaveAsync(error => errorResult = error));
        }

        // ObjectIDを保存して次に備える
        NcmbObjectId = ncmbObject.ObjectId;

        onCompleted?.Invoke(ncmbObject);

        Debug.Log("スコア送信完了");
    }
Exemple #23
0
    /// <summary>
    /// 一番初めのアカウント登録
    /// </summary>
    /// <param name="registPlayerName">登録するPlayerName</param>
    /// <param name="onRegist">登録成功時。objectIdを引数とした処理</param>
    public IEnumerator RegistAccountFirst(string registPlayerName, Action <string> onRegist)
    {
        NCMBObject obj = new NCMBObject("User");

        obj["PlayerName"]            = registPlayerName;
        obj["HighScore"]             = 0;
        obj["TotalGoalToEnemyCount"] = 0;
        obj["TotalPlayCount"]        = 0;
        obj["TotalScore"]            = 0;
        obj.Save();

        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>("User");
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        query.OrderByDescending("createDate"); //降順
        query.WhereEqualTo("PlayerName", registPlayerName);
        query.Limit = 1;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        if (error == null)
        {
            onRegist(obj.ObjectId.ToString());
        }
        else
        {
            Debug.Log(error);
        }
    }
Exemple #24
0
    public IEnumerator SetRecentClearTextFromFailedResult()
    {
        NCMBQuery <NCMBObject> query  = new NCMBQuery <NCMBObject>(SceneManager.GetActiveScene().name);
        List <NCMBObject>      result = null;
        NCMBException          error  = null;

        query.OrderByDescending("createDate");
        query.Limit = 10;

        query.FindAsync((List <NCMBObject> _result, NCMBException _error) =>
        {
            result = _result;
            error  = _error;
        });

        //resultもしくはerrorが入るまで待機
        yield return(new WaitWhile(() => result == null && error == null));

        //後続処理
        if (error == null)
        {
            this.SetRecentClearTextFromFailedResult(result);
        }
    }
Exemple #25
0
        private void _Connection(HttpWebRequest req, HttpClientCallback callback)
        {
            int statusCode = 0;
            string responseData = null;
            NCMBException error = null;

            //Post,Put時のコンテントデータ書き込み
            if (_method == ConnectType.POST || _method == ConnectType.PUT) {
                req = this._sendRequest (req, ref error);
                //書き込みでエラーがあれば終了
                if (error != null) {
                    callback (statusCode, responseData, error);
                    return;
                }
            }

            HttpWebResponse httpResponse = null;
            Stream streamResponse = null;
            StreamReader streamRead = null;

            try {
                //通常処理
                httpResponse = (HttpWebResponse)req.GetResponse ();//通信
                streamResponse = httpResponse.GetResponseStream (); //通信結果からResponseデータ作成
                statusCode = (int)httpResponse.StatusCode; //Responseデータからステータスコード取得
                streamRead = new StreamReader (streamResponse); //Responseデータからデータ取得
                responseData = streamRead.ReadToEnd ();//書き出したデータを全てstringに書き出し

            } catch (WebException ex) {

                //API側からのエラー処理
                using (WebResponse webResponse = ex.Response) {//WebExceptionからWebResponseを取得

                    error = new NCMBException ();
                    if (webResponse != null) {
                        streamResponse = webResponse.GetResponseStream ();//WebResponsからResponseデータ作成
                        streamRead = new StreamReader (streamResponse); //Responseデータからデータ取得
                        responseData = streamRead.ReadToEnd ();//書き出したデータを全てstringに書き出し
                        var jsonData = MiniJSON.Json.Deserialize (responseData) as Dictionary<string,object>;//Dictionaryに変換
                        var hashtableData = new Hashtable (jsonData);//Hashtableに変換

                        error.ErrorCode = (hashtableData ["code"].ToString ());//Hashtableから各keyのvalue取得
                        error.ErrorMessage = (hashtableData ["error"].ToString ());

                        httpResponse = (HttpWebResponse)webResponse;//WebResponseをHttpWebResponseに変換
                        statusCode = (int)httpResponse.StatusCode;//httpWebResponseからステータスコード取得
                    } else {
                        error.ErrorMessage = ex.Message;
                        error.ErrorCode = ((int)ex.Status).ToString();
                    }

                }
            } finally {
                if (httpResponse != null) {
                    httpResponse.Close ();
                }
                if (streamResponse != null) {
                    streamResponse.Close ();
                }
                if (streamRead != null) {
                    streamRead.Close ();
                }
                //check if session token error have or not
                if (error != null) {
                    _checkInvalidSessionToken (error.ErrorCode);
                }

                //レスポンスシグネチャのチェック
                if (NCMBSettings._responseValidationFlag && httpResponse != null) {

                    //レスポンスシグネチャが無い場合はE100001エラー
                    if (httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) != null) {
                        string responseSignature = httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) [0];
                        _signatureCheck (responseSignature, ref statusCode, ref responseData, ref error);
                    } else {
                        statusCode = 100;
                        responseData = "{}";
                        error = new NCMBException ();
                        error.ErrorCode = "E100001";
                        error.ErrorMessage = "Authentication error by response signature incorrect.";
                    }
                }

                callback (statusCode, responseData, error);
            }
        }
Exemple #26
0
 //同期データ送信
 private HttpWebRequest _sendRequest(HttpWebRequest req, ref NCMBException error)
 {
     byte[] postDataBytes = Encoding.Default.GetBytes (_content);
     Stream stream = null;
     try {
         stream = req.GetRequestStream ();
         stream.Write (postDataBytes, 0, postDataBytes.Length);
     } catch (WebException ex) {
         error = new NCMBException ();
         error.ErrorMessage = ex.Message;
         error.ErrorCode = ((int)ex.Status).ToString ();
     } finally {
         if (stream != null) {
             stream.Close ();
         }
     }
     return req;
 }
        private void _Connection(HttpWebRequest req, HttpClientCallback callback, HttpClientFileDataCallback fileCallback)
        {
            //SSLサイトにアクセス
            ServicePointManager.ServerCertificateValidationCallback = delegate {
                return(true);
            };

            int           statusCode   = 0;
            string        responseData = null;
            NCMBException error        = null;

            //Post,Put時のコンテントデータ書き込み
            if (_method == ConnectType.POST || _method == ConnectType.PUT)
            {
                if (_file != null)
                {
                    // File
                    req = this._sendRequestForFile(req, ref error);
                }
                else
                {
                    // 通常
                    req = this._sendRequest(req, ref error);
                }

                //書き込みでエラーがあれば終了
                if (error != null)
                {
                    callback(statusCode, responseData, error);
                    return;
                }
            }

            HttpWebResponse httpResponse   = null;
            Stream          streamResponse = null;
            StreamReader    streamRead     = null;

            byte[] responseByte = null;
            try {
                // 通信結果取得
                httpResponse   = (HttpWebResponse)req.GetResponse();
                streamResponse = httpResponse.GetResponseStream();
                statusCode     = (int)httpResponse.StatusCode;
                streamRead     = new StreamReader(streamResponse);
                if (fileCallback != null)
                {
                    // File_GET
                    MemoryStream memoryStream = new MemoryStream(0x10000);
                    byte[]       buffer       = new byte[0x1000];
                    int          bytes;
                    while ((bytes = streamResponse.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        memoryStream.Write(buffer, 0, bytes);
                    }
                    responseByte = memoryStream.ToArray();
                }
                else
                {
                    // 通常
                    responseData = streamRead.ReadToEnd();
                }
            } catch (WebException ex) {
                // 通信失敗
                using (WebResponse webResponse = ex.Response) {
                    error = new NCMBException();
                    error.ErrorMessage = ex.Message;

                    // mBaaSエラー
                    if (webResponse != null)
                    {
                        // エラーのJSON書き出し
                        streamResponse = webResponse.GetResponseStream();
                        streamRead     = new StreamReader(streamResponse);
                        responseData   = streamRead.ReadToEnd();
                        var jsonData      = MiniJSON.Json.Deserialize(responseData) as Dictionary <string, object>;
                        var hashtableData = new Hashtable(jsonData);

                        // エラー内容の設定
                        error.ErrorCode    = (hashtableData ["code"].ToString());
                        error.ErrorMessage = (hashtableData ["error"].ToString());
                        httpResponse       = (HttpWebResponse)webResponse;
                        statusCode         = (int)httpResponse.StatusCode;
                    }
                }
            } finally {
                if (httpResponse != null)
                {
                    httpResponse.Close();
                }
                if (streamResponse != null)
                {
                    streamResponse.Close();
                }
                if (streamRead != null)
                {
                    streamRead.Close();
                }
                //check if session token error have or not
                if (error != null)
                {
                    _checkInvalidSessionToken(error.ErrorCode);
                }

                //レスポンスデータにエスケープシーケンスがあればアンエスケープし、mobile backend上と同一にします
                var unescapeResponseData = responseData;
                if (unescapeResponseData != null && unescapeResponseData != Regex.Unescape(unescapeResponseData))
                {
                    unescapeResponseData = Regex.Unescape(unescapeResponseData);
                }

                //レスポンスシグネチャのチェック
                if (NCMBSettings._responseValidationFlag && httpResponse != null)
                {
                    //レスポンスシグネチャが無い場合はE100001エラー
                    if (httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) != null)
                    {
                        string responseSignature = httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) [0];
                        _signatureCheck(responseSignature, ref statusCode, ref unescapeResponseData, ref responseByte, ref error);
                    }
                    else
                    {
                        statusCode         = 100;
                        responseData       = "{}";
                        error              = new NCMBException();
                        error.ErrorCode    = "E100001";
                        error.ErrorMessage = "Authentication error by response signature incorrect.";
                    }
                }


                if (fileCallback != null)
                {
                    fileCallback(statusCode, responseByte, error);
                }
                else
                {
                    callback(statusCode, responseData, error);
                }
            }
        }
        private void _Connection(HttpWebRequest req, HttpClientCallback callback)
        {
            int           statusCode   = 0;
            string        responseData = null;
            NCMBException error        = null;

            //Post,Put時のコンテントデータ書き込み
            if (_method == ConnectType.POST || _method == ConnectType.PUT)
            {
                req = this._sendRequest(req, ref error);
                //書き込みでエラーがあれば終了
                if (error != null)
                {
                    callback(statusCode, responseData, error);
                    return;
                }
            }

            HttpWebResponse httpResponse   = null;
            Stream          streamResponse = null;
            StreamReader    streamRead     = null;

            try {
                //通常処理
                httpResponse   = (HttpWebResponse)req.GetResponse();   //①通信
                streamResponse = httpResponse.GetResponseStream();     //②通信結果からResponseデータ作成
                statusCode     = (int)httpResponse.StatusCode;         //③Responseデータからステータスコード取得
                streamRead     = new StreamReader(streamResponse);     //④Responseデータからデータ取得
                responseData   = streamRead.ReadToEnd();               //⑤書き出したデータを全てstringに書き出し
            } catch (WebException ex) {
                //API側からのエラー処理
                using (WebResponse webResponse = ex.Response) {                //①WebExceptionからWebResponseを取得
                    error = new NCMBException();
                    error.ErrorMessage = ex.Message;

                    streamResponse = webResponse.GetResponseStream();                                           //②WebResponsからResponseデータ作成
                    streamRead     = new StreamReader(streamResponse);                                          //③Responseデータからデータ取得
                    responseData   = streamRead.ReadToEnd();                                                    //④書き出したデータを全てstringに書き出し

                    var jsonData      = MiniJSON.Json.Deserialize(responseData) as Dictionary <string, object>; //⑤Dictionaryに変換
                    var hashtableData = new Hashtable(jsonData);                                                //⑥Hashtableに変換 必要?

                    error.ErrorCode    = (hashtableData ["code"].ToString());                                   //⑦Hashtableから各keyのvalue取得
                    error.ErrorMessage = (hashtableData ["error"].ToString());

                    httpResponse = (HttpWebResponse)webResponse;                  //⑧WebResponseをHttpWebResponseに変換
                    statusCode   = (int)httpResponse.StatusCode;                  //⑨httpWebResponseからステータスコード取得
                }
            } finally {
                if (httpResponse != null)
                {
                    httpResponse.Close();
                }
                if (streamResponse != null)
                {
                    streamResponse.Close();
                }
                if (streamRead != null)
                {
                    streamRead.Close();
                }
                //check if session token error have or not
                if (error != null)
                {
                    _checkInvalidSessionToken(error.ErrorCode);
                }

                //レスポンスデータにエスケープシーケンスがあればアンエスケープし、mobile backend上と同一にします
                if (responseData != null)
                {
                    if (responseData != Regex.Unescape(responseData))
                    {
                        UnityEngine.Debug.Log("Unescape start." + responseData);
                        responseData = Regex.Unescape(responseData);
                        UnityEngine.Debug.Log("Unescape finish." + responseData);
                    }
                }

                //レスポンスシグネチャのチェック Flagがtureかつエラーコードが以下の三つ以外の時はチェックを行う
                //if (NCMBSettings._responseValidationFlag && (errorCode != "E404002" && errorCode != "E405001" && errorCode != "E415001")) {
                if (NCMBSettings._responseValidationFlag && httpResponse != null)
                {
                    //レスポンスシグネチャが無い場合はE100001エラー
                    if (httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) != null)
                    {
                        string responseSignature = httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) [0];
                        _signatureCheck(responseSignature, ref statusCode, ref responseData, ref error);
                    }
                    else
                    {
                        statusCode         = 100;
                        responseData       = "{}";
                        error              = new NCMBException();
                        error.ErrorCode    = "E100001";
                        error.ErrorMessage = "Authentication error by response signature incorrect.";
                    }
                }

                callback(statusCode, responseData, error);
            }
        }
        private void _signatureCheck(string responseSignature, ref int statusCode, ref string responseData, ref NCMBException error)
        {
            //hashデータ作成
            StringBuilder stringHashData = _makeSignatureHashData ();

            //レスポンスデータ追加 Delete時はレスポンスデータが無いためチェックする
            if (responseData != "") {
                stringHashData.Append ("\n");
                stringHashData.Append (responseData);
            }

            //シグネチャ再生成
            string responseMakeSignature = _makeSignature (stringHashData.ToString ());

            //レスポンスシグネチャと生成したシグネチャが違う場合はエラー
            if (responseSignature != responseMakeSignature) {
                statusCode = 100;
                responseData = "{}";
                error = new NCMBException ();
                error.ErrorCode = "E100001";
                error.ErrorMessage = "Authentication error by response signature incorrect.";
            }
            NCMBDebug.Log ("【responseSignature】 " + responseSignature);
            NCMBDebug.Log ("【responseMakeSignature】 " + responseMakeSignature);
            NCMBDebug.Log ("検証実行");
        }
 //同期データ送信
 private HttpWebRequest _sendRequest(HttpWebRequest req, ref NCMBException error)
 {
     byte[] postDataBytes = Encoding.Default.GetBytes (_content);
     Stream stream = null;
     try {
         stream = req.GetRequestStream ();
         stream.Write (postDataBytes, 0, postDataBytes.Length);
     } catch (SystemException cause) {
         //エラー処理
         //throw new NCMBException (cause);
         error = new NCMBException (cause);
     } finally {
         if (stream != null) {
             stream.Close ();
         }
     }
     return req;
 }
        private void _Connection(HttpWebRequest req, HttpClientCallback callback)
        {
            int statusCode = 0;
            string responseData = null;
            NCMBException error = null;

            //Post,Put時のコンテントデータ書き込み
            if (_method == ConnectType.POST || _method == ConnectType.PUT) {
                req = this._sendRequest (req, ref error);
                //書き込みでエラーがあれば終了
                if (error != null) {
                    callback (statusCode, responseData, error);
                    return;
                }
            }

            HttpWebResponse httpResponse = null;
            Stream streamResponse = null;
            StreamReader streamRead = null;

            try {
                //通常処理
                httpResponse = (HttpWebResponse)req.GetResponse ();
                streamResponse = httpResponse.GetResponseStream ();
                statusCode = (int)httpResponse.StatusCode;
                streamRead = new StreamReader (streamResponse);
                responseData = streamRead.ReadToEnd ();

            } catch (WebException ex) {

                //API側からのエラー処理
                using (WebResponse webResponse = ex.Response) {
                    error = new NCMBException ();
                    error.ErrorMessage = ex.Message;

                    streamResponse = webResponse.GetResponseStream ();
                    streamRead = new StreamReader (streamResponse);
                    responseData = streamRead.ReadToEnd ();

                    var jsonData = MiniJSON.Json.Deserialize (responseData) as Dictionary<string,object>;
                    var hashtableData = new Hashtable (jsonData);

                    error.ErrorCode = (hashtableData ["code"].ToString ());
                    error.ErrorMessage = (hashtableData ["error"].ToString ());

                    httpResponse = (HttpWebResponse)webResponse;
                    statusCode = (int)httpResponse.StatusCode;
                }
            } finally {
                if (httpResponse != null) {
                    httpResponse.Close ();
                }
                if (streamResponse != null) {
                    streamResponse.Close ();
                }
                if (streamRead != null) {
                    streamRead.Close ();
                }
                //check if session token error have or not
                if (error != null) {
                    _checkInvalidSessionToken (error.ErrorCode);
                }

                //レスポンスシグネチャのチェック Flagがtureかつエラーコードが以下の三つ以外の時はチェックを行う
                //if (NCMBSettings._responseValidationFlag && (errorCode != "E404002" && errorCode != "E405001" && errorCode != "E415001")) {
                if (NCMBSettings._responseValidationFlag && httpResponse != null) {

                    //レスポンスシグネチャが無い場合はE100001エラー
                    if (httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) != null) {
                        string responseSignature = httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) [0];
                        _signatureCheck (responseSignature, ref statusCode, ref responseData, ref error);
                    } else {
                        statusCode = 100;
                        responseData = "{}";
                        error = new NCMBException ();
                        error.ErrorCode = "E100001";
                        error.ErrorMessage = "Authentication error by response signature incorrect.";
                    }
                }

                callback (statusCode, responseData, error);
            }
        }
Exemple #32
0
 /// <summary>
 /// フレンド申請の拒否の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="error">エラーの有無</param>
 private void setDeclineFriendRequestError(NCMBException error)
 {
 }
Exemple #33
0
 /// <summary>
 /// フレンド申請の承認の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="error">エラーの有無</param>
 private void setAcceptFriendRequestError(NCMBException error)
 {
 }
Exemple #34
0
 /// <summary>
 /// ユーザ検索の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="objList">ユーザ一覧</param>
 /// <param name="error">エラーの有無</param>
 private void setSearchUserList(List <NCMBObject> objList, NCMBException error)
 {
 }
Exemple #35
0
 /// <summary>
 /// メッセージの削除の結果を受け取るメソッド
 /// エラーがnullだと成功
 /// </summary>
 /// <param name="error">エラーの有無</param>
 private void setRemoveMessageError(NCMBException error)
 {
 }
        private void _Connection(HttpWebRequest req, HttpClientCallback callback)
        {
            int statusCode = 0;
            string responseData = null;
            NCMBException error = null;

            //Post,Put時のコンテントデータ書き込み
            if (_method == ConnectType.POST || _method == ConnectType.PUT) {
                req = this._sendRequest (req, ref error);
                //書き込みでエラーがあれば終了
                if (error != null) {
                    callback (statusCode, responseData, error);
                    return;
                }
            }

            HttpWebResponse httpResponse = null;
            Stream streamResponse = null;
            StreamReader streamRead = null;

            try {
                //通常処理
                httpResponse = (HttpWebResponse)req.GetResponse ();//①通信
                streamResponse = httpResponse.GetResponseStream (); //②通信結果からResponseデータ作成
                statusCode = (int)httpResponse.StatusCode; //③Responseデータからステータスコード取得
                streamRead = new StreamReader (streamResponse); //④Responseデータからデータ取得
                responseData = streamRead.ReadToEnd ();//⑤書き出したデータを全てstringに書き出し

            } catch (WebException ex) {

                //API側からのエラー処理
                using (WebResponse webResponse = ex.Response) {//①WebExceptionからWebResponseを取得
                    error = new NCMBException ();
                    error.ErrorMessage = ex.Message;

                    streamResponse = webResponse.GetResponseStream ();//②WebResponsからResponseデータ作成
                    streamRead = new StreamReader (streamResponse); //③Responseデータからデータ取得
                    responseData = streamRead.ReadToEnd ();//④書き出したデータを全てstringに書き出し

                    var jsonData = MiniJSON.Json.Deserialize (responseData) as Dictionary<string,object>;//⑤Dictionaryに変換
                    var hashtableData = new Hashtable (jsonData);//⑥Hashtableに変換 必要?

                    error.ErrorCode = (hashtableData ["code"].ToString ());//⑦Hashtableから各keyのvalue取得
                    error.ErrorMessage = (hashtableData ["error"].ToString ());

                    httpResponse = (HttpWebResponse)webResponse;//⑧WebResponseをHttpWebResponseに変換
                    statusCode = (int)httpResponse.StatusCode;//⑨httpWebResponseからステータスコード取得
                }
            } finally {
                if (httpResponse != null) {
                    httpResponse.Close ();
                }
                if (streamResponse != null) {
                    streamResponse.Close ();
                }
                if (streamRead != null) {
                    streamRead.Close ();
                }
                //check if session token error have or not
                if (error != null) {
                    _checkInvalidSessionToken (error.ErrorCode);
                }

                //レスポンスデータにエスケープシーケンスがあればアンエスケープし、mobile backend上と同一にします
                if (responseData != null) {
                    if(responseData != Regex.Unescape(responseData)){
                        UnityEngine.Debug.Log ("Unescape start."+responseData);
                        responseData = Regex.Unescape (responseData);
                        UnityEngine.Debug.Log ("Unescape finish."+responseData);
                    }
                }

                //レスポンスシグネチャのチェック Flagがtureかつエラーコードが以下の三つ以外の時はチェックを行う
                //if (NCMBSettings._responseValidationFlag && (errorCode != "E404002" && errorCode != "E405001" && errorCode != "E415001")) {
                if (NCMBSettings._responseValidationFlag && httpResponse != null) {

                    //レスポンスシグネチャが無い場合はE100001エラー
                    if (httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) != null) {
                        string responseSignature = httpResponse.Headers.GetValues (RESPONSE_SIGNATURE) [0];
                        _signatureCheck (responseSignature, ref statusCode, ref responseData, ref error);
                    } else {
                        statusCode = 100;
                        responseData = "{}";
                        error = new NCMBException ();
                        error.ErrorCode = "E100001";
                        error.ErrorMessage = "Authentication error by response signature incorrect.";
                    }
                }

                callback (statusCode, responseData, error);
            }
        }