IEnumerator Flow()
    {
        //パーミッションチェック
        yield return(StartCoroutine(PermissionCheck()));

        //デバイスとの接続状況初期化 アプリ起動時は必ず切断されてる
        UserDataManager.State.SaveDeviceConnectState(false);
        //ロゴ表示
        yield return(StartCoroutine(DispBrandLogo()));

        //初期化
        yield return(StartCoroutine(InitializeFlow()));

        if (IsInitialLunch())
        {
            //初期設定
            //利用規約に同意していなければ、利用規約表示
            if (!IsAcceptPrivacyPolicy())
            {
                PlayerPrefs.SetInt("tapFromSetting", 0);
                SceneTransitionManager.LoadLevel(SceneTransitionManager.LoadScene.TermsOfUse);
                yield break;
            }
            //プロフィール設定をしていなければ、プロフィール表示
            if (!IsDoneProfileSetting())
            {
                SceneTransitionManager.LoadLevel(SceneTransitionManager.LoadScene.Profile);
                yield break;
            }
        }
        //データの復元
        if (UserDataManager.State.isDoneDevicePareing())
        {
            //ペアリングが完了してるなら、復元確認を行う
            if (UserDataManager.State.isNessesaryRestore())
            {
                //データの復元が必要であれば、復元処理を行う
                bool isCompleteRestore = false;
                if (UserDataManager.State.GetRestoreDataCount() == 0)
                {
                    //初回復元の場合
                    FtpFunction.RestoreData(this, () => isCompleteRestore = true);
                    yield return(new WaitUntil(() => isCompleteRestore));
                }
                else
                {
                    //復元再開の場合
                    FtpFunction.ReRestoreData(this, () => isCompleteRestore = true);
                    yield return(new WaitUntil(() => isCompleteRestore));
                }
            }
        }
        if (!IsInitialLunch())
        {
            //未アップロードのCsvファイルが存在すれば、アップロードする
            yield return(StartCoroutine(HttpManager.UploadUnsendDatasByHttp()));
        }
        //FTPサーバーにファームウェアの最新バージョンが存在するか確認する
        if (UserDataManager.State.isDoneDevicePareing())    //ペアリング済みであれば
        {
            yield return(StartCoroutine(FarmwareVersionCheckFlow()));
        }
        //ホームへ
        SceneTransitionManager.LoadLevel(SceneTransitionManager.LoadScene.Home);
    }
Beispiel #2
0
    /// <summary>
    /// デバイスとペアリングする
    /// </summary>
    /// <param name="deviceName">デバイス名</param>
    /// <param name="deviceAdress">デバイスのBLEアドレス</param>
    /// <param name="index">iOSでのみ使用するデバイス識別番号</param>
    IEnumerator Parering(string deviceName, string deviceAdress, int index = 0)
    {
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            BluetoothManager.Instance.ChangeServiceUUIDToNormal();
        }
        else
        {
            BluetoothManager.Instance.ChangeServiceUUIDToFirmwareUpdate();
        }

        //Bluetoothが有効か確認
        bool isBluetoothActive = false;

        yield return(StartCoroutine(CheckBluetoothIsActive((bool isActive) => isBluetoothActive = isActive)));

        if (!isBluetoothActive)
        {
            //Bluetooth無効時
            yield break;
        }
        //接続できてなければ、接続
        if (!UserDataManager.State.isConnectingDevice())
        {
            UpdateDialogAddButton.Show(deviceName + "に接続しています。",
                                       false,
                                       true,
                                       null,
                                       () =>
            {
                //キャンセルボタン押下時
                //デバイスとの接続を切る
                BluetoothManager.Instance.Disconnect();
            },
                                       "OK",
                                       "キャンセル");
            bool isDeviceConnectSuccess = false;
            yield return(StartCoroutine(DeviceConnect(deviceName, deviceAdress, (bool isSuccess) => isDeviceConnectSuccess = isSuccess, index)));

            Debug.Log("Connecting_Result:" + isDeviceConnectSuccess);
            UpdateDialogAddButton.Dismiss();
            if (!isDeviceConnectSuccess)
            {
                //デバイス接続に失敗すれば	、接続失敗した旨を伝えるダイアログを表示する
                yield return(StartCoroutine(TellFailedConnect(deviceName)));

                yield break;
            }
        }
        UpdateDialog.Show("同期中");

        // デバイスがアプリ状態なら、バージョンを取得する
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            //バージョン取得
            bool isGetVersionSuccess = false;
            yield return(StartCoroutine(GetVersion((bool isSuccess) => isGetVersionSuccess = isSuccess)));

            Debug.Log("GetVersion_Result:" + isGetVersionSuccess);
            if (!isGetVersionSuccess)
            {
                //バージョン取得に失敗すれば
                UpdateDialog.Dismiss();
                //同期に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedSync()));

                yield break;
            }
        }

        // デバイス状態がアプリならデバイス情報を取得する
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            //デバイス情報取得
            bool     isGetDeviceInfoSuccess = false;
            DateTime deviceTime             = DateTime.MinValue;
            yield return(StartCoroutine(GetDeviceInfo((bool isSuccess, DateTime _deviceTime) =>
            {
                isGetDeviceInfoSuccess = isSuccess;
                deviceTime = _deviceTime;
            })));

            Debug.Log("GetDeviceInfo_Result:" + isGetDeviceInfoSuccess);
            if (!isGetDeviceInfoSuccess)
            {
                //デバイス情報取得に失敗すれば
                UpdateDialog.Dismiss();
                //同期に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedSync()));

                yield break;
            }

            //デバイス時刻補正
            bool isCorrectDeviceTimeSuccess = false;
            yield return(StartCoroutine(CorrectDeviceTime((bool isSuccess) => isCorrectDeviceTimeSuccess = isSuccess, deviceTime)));

            Debug.Log("CorrectDeviceTime_Result:" + isCorrectDeviceTimeSuccess);
            if (!isCorrectDeviceTimeSuccess)
            {
                //デバイス時刻補正に失敗すれば
                UpdateDialog.Dismiss();
                //設定の変更に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedChangeSetting()));

                yield break;
            }
        }

        UpdateDialog.Dismiss();
        //ペアリングが完了した事を記録
        UserDataManager.State.SaveDoneDevicePareing();
        //接続したデバイスを記憶しておく
        UserDataManager.Device.SavePareringBLEAdress(deviceAdress);
        UserDataManager.Device.SavePareringDeviceName(deviceName);
        //完了ダイアログ表示
        yield return(StartCoroutine(ShowPareringCompleteDialog(deviceName)));

        //データの復元が必要であればデータを復元する
        if (UserDataManager.State.isNessesaryRestore())
        {
            bool isCompleteRestore = false;
            if (UserDataManager.State.GetRestoreDataCount() == 0)
            {
                //初回復元の場合
                FtpFunction.RestoreData(this, () => isCompleteRestore = true);
                yield return(new WaitUntil(() => isCompleteRestore));

                //ファームウェアアップデートが必要か確認する
                yield return(StartCoroutine(FarmwareVersionCheckFlow()));
            }
            else
            {
                //復元再開の場合
                FtpFunction.ReRestoreData(this, () => isCompleteRestore = true);
                yield return(new WaitUntil(() => isCompleteRestore));
            }
        }
        //ホーム画面に遷移
        SceneTransitionManager.LoadLevel(SceneTransitionManager.LoadScene.Home);
    }