Пример #1
0
    //以前の睡眠データを取得する処理の流れ
    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();
    }
Пример #2
0
    /// <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();
        }
    }