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 { private CloudSaveManager() { TapCloudSaveCallback callback = new TapCloudSaveCallback(); TapTapCloudSave.RegisterCloudSaveCallback(callback); } // 检查是否存在存档,若存在则加载,否则创建新存档 public async CTask LoadOrCreateArchiveAsync() { try { // 获取存档列表 List 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}"); } } /// /// 创建存档 /// public async CTask 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 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; } } }