//以前の睡眠データを取得する処理の流れ static IEnumerator RestoreDataFlow(MonoBehaviour mono, Action onComplete) { //同期中の表示 UpdateDialog.Show("同期中"); //FTPサーバーに前回のデータが存在しているか確認する。 var deviceAdress = UserDataManager.Device.GetPareringDeviceAdress(); Debug.Log("deviceAdress:" + deviceAdress); int getPriviousDataResult = -1; //前回データがあるかどうかの通信結果を格納する yield return(mono.StartCoroutine(IsExistPriviousDataInServer(deviceAdress, (int result) => getPriviousDataResult = result))); UpdateDialog.Dismiss(); if (getPriviousDataResult == 1) { //前回のデータが存在していれば、ユーザにデータを復元するかどうか尋ねる bool isRestoreData = false; yield return(mono.StartCoroutine(AskRestorePriviousData(mono, (bool _isRestoreData) => isRestoreData = _isRestoreData))); if (isRestoreData) { //ユーザがデータの復元に同意すれば yield return(mono.StartCoroutine(RestoreData(mono, deviceAdress))); } else { //復元に同意しなかったなら UpdateDialog.Show("同期中"); //バックアップデータの削除をする var isDeleteTask = HttpManager.DeleteBackupDataByRename(deviceAdress); yield return(isDeleteTask.AsCoroutine()); if (isDeleteTask.Result) { //バックアップデータの削除に成功すれば //以降復元しないように設定 UserDataManager.State.SaveNessesaryRestore(false); UpdateDialog.Dismiss(); //削除完了ダイアログを表示する yield return(mono.StartCoroutine(TellCompleteBackupDataDelete())); } else { //バックアップデータの削除に失敗すれば UpdateDialog.Dismiss(); bool useNoBackup = false; yield return(mono.StartCoroutine(AskNoBackupUse((bool _useNoBackup) => useNoBackup = _useNoBackup))); if (useNoBackup) { //バックアップの確認を断念し、このままアプリを使用するなら //以降復元確認は不要と設定 UserDataManager.State.SaveNessesaryRestore(false); } else { //バックアップデータの確認をするなら //再帰処理 yield return(mono.StartCoroutine(RestoreDataFlow(mono, onComplete))); } } } } else if (getPriviousDataResult == 0) { //前回データが存在していなければ、以降復元確認は不要と設定 UserDataManager.State.SaveNessesaryRestore(false); } else { //通信エラーが発生し、前回データの有無が確認できなければ bool useNoBackup = false; yield return(mono.StartCoroutine(AskNoBackupUse((bool _useNoBackup) => useNoBackup = _useNoBackup))); if (useNoBackup) { //バックアップの確認を断念し、このままアプリを使用するなら //以降復元確認は不要と設定 UserDataManager.State.SaveNessesaryRestore(false); } else { //バックアップデータの確認をするなら //再帰処理 yield return(mono.StartCoroutine(RestoreDataFlow(mono, onComplete))); } } onComplete(); }
/// <summary> /// バックアップデータを復元できないようリネームする処理の流れ /// </summary> /// <param name="mono">コルーチンを実行するのに必要なMonoBehaviourを継承したインスタンス</param> /// <param name="onFinish">リネーム処理が終了した時に呼び出されるコールバック</param> static IEnumerator RenameBackupDataFlow(MonoBehaviour mono, Action onFinish) { string deviceAdress = UserDataManager.Device.GetPareringDeviceAdress(); int getPriviousDataResult = -1; //前回データがあるかどうかの通信結果を格納する UpdateDialog.Show("同期中"); yield return(mono.StartCoroutine(IsExistPriviousDataInServer(deviceAdress, (int result) => getPriviousDataResult = result))); UpdateDialog.Dismiss(); switch (getPriviousDataResult) { case 1: //前回データが存在すれば bool isDelete = false; yield return(mono.StartCoroutine(AskDeleteBackupData(mono, (bool _isDelete) => isDelete = _isDelete))); if (isDelete) { //バックアップデータの削除をする UpdateDialog.Show("同期中"); var isDeleteTask = HttpManager.DeleteBackupDataByRename(deviceAdress); yield return(isDeleteTask.AsCoroutine()); if (!isDeleteTask.Result) { //バックアップデータの削除に失敗すれば //データの削除に失敗した事を伝えるダイアログを表示する yield return(mono.StartCoroutine(TellFailedDeleteBackupData())); Debug.Log("Failed GetBackupData..."); if (onFinish != null) { onFinish(); } yield break; } UpdateDialog.Dismiss(); //削除完了ダイアログを表示する yield return(mono.StartCoroutine(TellCompleteBackupDataDelete())); } break; case 0: //前回データがなければ //削除するデータがない事を伝えるダイアログを表示する yield return(mono.StartCoroutine(TellNotFoundBackupData())); Debug.Log("Not found BackupData..."); break; default: //前回データの取得に失敗すれば //データの削除に失敗した事を伝えるダイアログを表示する yield return(mono.StartCoroutine(TellFailedDeleteBackupData())); Debug.Log("Failed GetBackupData..."); break; } if (onFinish != null) { onFinish(); } }