/// <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())); }
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); } }
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); } }
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())); }
/// <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; }
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); } }
private void setUserScore(int score, NCMBException error) { if (error == null) { if (score != 0) { bestScore = score.ToString(); } } }
/// <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(); } } }
/// <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(); } } }
/// <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); } }
/// <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); } }
/// <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); }
//同期データ送信 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); }
/// <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)); } }
/// <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(); } }
/// <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("スコア送信完了"); }
/// <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); } }
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); } }
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); } }
//同期データ送信 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); } }
/// <summary> /// フレンド申請の拒否の結果を受け取るメソッド /// エラーがnullだと成功 /// </summary> /// <param name="error">エラーの有無</param> private void setDeclineFriendRequestError(NCMBException error) { }
/// <summary> /// フレンド申請の承認の結果を受け取るメソッド /// エラーがnullだと成功 /// </summary> /// <param name="error">エラーの有無</param> private void setAcceptFriendRequestError(NCMBException error) { }
/// <summary> /// ユーザ検索の結果を受け取るメソッド /// エラーがnullだと成功 /// </summary> /// <param name="objList">ユーザ一覧</param> /// <param name="error">エラーの有無</param> private void setSearchUserList(List <NCMBObject> objList, NCMBException error) { }
/// <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); } }