| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- using System.Threading.Tasks;
- using Fort23.Core;
- using Fort23.UTool;
- using UnityEngine;
- using TapSDK.Core;
- using TapSDK.CloudSave;
- using TapSDK.Login;
- using TapSDK.UI;
- public class CloudSaveManager : Singleton<CloudSaveManager>
- {
- private CloudSaveManager()
- {
- TapCloudSaveCallback callback = new TapCloudSaveCallback();
- TapTapCloudSave.RegisterCloudSaveCallback(callback);
- }
- // 检查是否存在存档,若存在则加载,否则创建新存档
- public async CTask LoadOrCreateArchiveAsync()
- {
- try
- {
- // 获取存档列表
- List<ArchiveData> archives = await TapTapCloudSave.GetArchiveList();
- if (archives != null && archives.Count > 0)
- {
- // 存在存档,加载第一个存档
- ArchiveData archive = archives[0];
- if (archive == null || string.IsNullOrEmpty(archive.Uuid) || archive.Uuid.Length > 64)
- {
- AccountFileInfo.Instance.LoadPlayerData();
- // 创建新存档
- await CreateArchiveAsync();
- return;
- }
- PlayerManager.Instance.Uuid = archive.Uuid;
- await LoadArchiveAsync();
- AccountFileInfo.Instance.LoadPlayerData();
- }
- else
- {
- // 无存档,创建新存档
- AccountFileInfo.Instance.LoadPlayerData();
- await CreateArchiveAsync();
- }
- }
- catch (TapException ex)
- {
- LogTool.Error($"Failed to check/load archive: {ex.Code} - {ex.Message}");
- }
- catch (Exception ex)
- {
- LogTool.Error($"Unexpected error checking/loading archive: {ex.Message}");
- }
- }
- /// <summary>
- /// 创建存档
- /// </summary>
- public async CTask<string> CreateArchiveAsync()
- {
- try
- {
- // 创建存档元信息
- ArchiveMetadata metadata = new ArchiveMetadata(
- archiveName: "playerData",
- archiveSummary: "玩家数据",
- archiveExtra: "额外信息",
- archivePlaytime: 0
- );
- // 创建存档
- ArchiveData createdArchive =
- await TapTapCloudSave.CreateArchive(metadata, AccountFileInfo.Instance.persistentDataPath, null);
- AccountFileInfo.Instance.lasetSaveTime = System.DateTime.Now.Ticks;
- PlayerManager.Instance.Uuid = createdArchive.Uuid;
- LogTool.Error($"存档创建成功,UUID: {createdArchive.Uuid}");
- return createdArchive.Uuid;
- }
- catch (TapException ex)
- {
- LogTool.Error($"创建存档失败: {ex.Code} - {ex.Message}");
- throw;
- }
- catch (Exception ex)
- {
- LogTool.Error($"创建存档失败: {ex.Message}");
- throw;
- }
- }
- // 更新存档
- public async CTask UpdateArchiveAsync()
- {
- if (PlayerManager.Instance.Uuid == "")
- return;
- try
- {
- // 更新存档元信息
- ArchiveMetadata metadata = new ArchiveMetadata(
- archiveName: "playerData",
- archiveSummary: "玩家数据",
- archiveExtra: "额外信息",
- archivePlaytime: 0
- );
- // 更新存档
- ArchiveData updatedArchive =
- await TapTapCloudSave.UpdateArchive(PlayerManager.Instance.Uuid, metadata,
- AccountFileInfo.Instance.persistentDataPath,
- null);
- LogTool.Log($"存档更新成功,UUID: {updatedArchive.Uuid}");
- }
- catch (TapException ex)
- {
- LogTool.Error($"更新存档失败: {ex.Code} - {ex.Message}");
- throw;
- }
- catch (Exception ex)
- {
- LogTool.Error($"更新存档失败: {ex.Message}");
- throw;
- }
- }
- // 查询存档
- public async CTask LoadArchiveAsync()
- {
- try
- {
- // 获取存档列表
- List<ArchiveData> archives = await TapTapCloudSave.GetArchiveList();
- ArchiveData archive = archives[0];
- // 下载存档文件
- byte[] data =
- await TapTapCloudSave.GetArchiveData(PlayerManager.Instance.Uuid,
- archive.FileId);
- string str1 = Encoding.UTF8.GetString(data);
- LogTool.Log(str1);
- File.WriteAllBytes(AccountFileInfo.Instance.persistentDataPath, data);
- LogTool.Error("读取存档成功");
- }
- catch (TapException ex)
- {
- LogTool.Error($"加载存档失败: {ex.Code} - {ex.Message}");
- throw;
- }
- catch (Exception ex)
- {
- LogTool.Error($"加载存档失败: {ex.Message}");
- throw;
- }
- }
- // 删除存档
- public async Task DeleteArchiveAsync(string archiveUuid)
- {
- try
- {
- await TapTapCloudSave.DeleteArchive(archiveUuid);
- LogTool.Log($"存档删除成功,UUID: {archiveUuid}");
- }
- catch (TapException ex)
- {
- LogTool.Error($"删除存档失败: {ex.Code} - {ex.Message}");
- throw;
- }
- catch (Exception ex)
- {
- LogTool.Error($"删除存档失败: {ex.Message}");
- throw;
- }
- }
- }
|