/// <summary> /// データ情報更新 /// </summary> /// <param name="result">結果</param> private void UpdateDataInfo(IO_RESULT result) { UserSettings us = this.usedSettings = this.procSettings; SaveAllyStatus sas = this.saveAllyStatus = this.procSaveAllyStatus; //us.format = this.control.saveJson.isOn ? FORMAT.JSON : FORMAT.BINARY; //us.encrypt = this.control.saveEncrypt.isOn; //us.backup = this.control.saveBackup.isOn; if (us.count > 0) { this.control.dataInfo.text = string.Format(INFO_FORMAT, us.version, us.encrypt, us.format, us.backup, System.DateTime.FromBinary(us.date).ToString(), us.count); this.control.filePath.text = Application.persistentDataPath + us.fileName; } else { this.control.dataInfo.text = string.Format(INFO_FORMAT, "--", "--", "--", "--", "-/-/---- --:--:--", "--"); this.control.filePath.text = "----"; } this.state = STATE.IDLE; switch (result) { case IO_RESULT.NONE: this.accessMessage = "NOTHING"; break; case IO_RESULT.SAVE_SUCCESS: case IO_RESULT.LOAD_SUCCESS: this.accessMessage = "SUCCESS"; break; case IO_RESULT.SAVE_FAILED: case IO_RESULT.LOAD_FAILED: this.accessMessage = "FAILED"; break; default: this.accessMessage = "NOTHING"; break; } this.control.access.text = this.accessMessage; }
/// <summary> /// 完了コールバック /// </summary> /// <param name="ret">結果</param> /// <param name="dataInfo">結果情報</param> private void IOHandler(IO_RESULT ret, ref DataInfo dataInfo) { this.result = ret; switch (ret) { case IO_RESULT.SAVE_SUCCESS: // 保存成功 if (dataInfo.async) { this.state = STATE.ASYNC_WAIT; break; } this.UpdateDataInfo(ret); this.state = STATE.IDLE; break; case IO_RESULT.SAVE_FAILED: // 保存失敗 if (dataInfo.async) { this.state = STATE.ASYNC_WAIT; break; } this.state = STATE.IDLE; break; case IO_RESULT.LOAD_SUCCESS: // 読込成功 /* * this.procSettings = dataInfo.serializer as UserSettings; * this.procSettings.encrypt = dataInfo.encrypt; * this.procSettings.format = dataInfo.format; * this.procSettings.backup = dataInfo.backup; */ this.procSaveAllyStatus = dataInfo.serializer as SaveAllyStatus; this.procSaveAllyStatus.encrypt = dataInfo.encrypt; this.procSaveAllyStatus.format = dataInfo.format; this.procSaveAllyStatus.backup = dataInfo.backup; this.allyStatus.StatusLoad(this.procSaveAllyStatus); if (dataInfo.async) { this.state = STATE.ASYNC_WAIT; break; } this.UpdateDataInfo(ret); this.state = STATE.IDLE; break; case IO_RESULT.LOAD_FAILED: // 読込失敗 if (dataInfo.async) { this.state = STATE.ASYNC_WAIT; break; } this.state = STATE.IDLE; break; case IO_RESULT.NONE: // データ不備 this.state = STATE.IDLE; break; } }
/// <summary> /// ストレージアクセス終了処理 /// </summary> /// <param name="ret">結果</param> /// <param name="dataInfo">保存情報</param> private void FinishAccessing(IO_RESULT ret, ref DataInfo dataInfo) { // 失敗時はバックアップを参照 switch (ret) { case IO_RESULT.LOAD_FAILED: if (!dataInfo.filePath.Contains(BACKUP_KEY)) { string backupPath = dataInfo.filePath + BACKUP_KEY; if (File.Exists(backupPath)) { lock (this.sync) { this.isAccessing = false; } dataInfo.filePath = backupPath; if (dataInfo.async) { ThreadPool.QueueUserWorkItem(this.loadThreadHandler, dataInfo); } else { this.LoadThreadMain(dataInfo); } return; } } break; #if DEMO case IO_RESULT.LOAD_SUCCESS: dataInfo.backup = File.Exists(dataInfo.filePath + BACKUP_KEY); break; #endif case IO_RESULT.SAVE_SUCCESS: // バックアップ生成 if (dataInfo.serializer.backup) { try { File.Copy(dataInfo.filePath, dataInfo.filePath + BACKUP_KEY, true); } catch (System.Exception e) { Debug.LogError("BACKUP FAILED : " + dataInfo.filePath + "\n" + e.Message); } } else { File.Delete(dataInfo.filePath + BACKUP_KEY); } break; } if (dataInfo.finishHandler != null) { dataInfo.finishHandler(ret, ref dataInfo); } lock (this.sync) { this.isAccessing = false; } #if DEBUG string message = "ACCESS FILE => " + dataInfo.filePath + "\n.........."; switch (ret) { case IO_RESULT.SAVE_FAILED: case IO_RESULT.LOAD_FAILED: message += "<color=yellow>"; break; case IO_RESULT.SAVE_SUCCESS: case IO_RESULT.LOAD_SUCCESS: message += "<color=white>"; break; } Debug.Log(message + ret + "</color>"); #endif }