CloudSaveManager.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Fort23.Core;
  7. using Fort23.UTool;
  8. using UnityEngine;
  9. using TapSDK.Core;
  10. using TapSDK.CloudSave;
  11. using TapSDK.Login;
  12. using TapSDK.UI;
  13. public class CloudSaveManager : Singleton<CloudSaveManager>
  14. {
  15. private CloudSaveManager()
  16. {
  17. TapCloudSaveCallback callback = new TapCloudSaveCallback();
  18. TapTapCloudSave.RegisterCloudSaveCallback(callback);
  19. }
  20. // 检查是否存在存档,若存在则加载,否则创建新存档
  21. public async CTask LoadOrCreateArchiveAsync()
  22. {
  23. try
  24. {
  25. // 获取存档列表
  26. List<ArchiveData> archives = await TapTapCloudSave.GetArchiveList();
  27. if (archives != null && archives.Count > 0)
  28. {
  29. // 存在存档,加载第一个存档
  30. ArchiveData archive = archives[0];
  31. if (archive == null || string.IsNullOrEmpty(archive.Uuid) || archive.Uuid.Length > 64)
  32. {
  33. AccountFileInfo.Instance.LoadPlayerData();
  34. // 创建新存档
  35. await CreateArchiveAsync();
  36. return;
  37. }
  38. PlayerManager.Instance.Uuid = archive.Uuid;
  39. await LoadArchiveAsync();
  40. AccountFileInfo.Instance.LoadPlayerData();
  41. }
  42. else
  43. {
  44. // 无存档,创建新存档
  45. AccountFileInfo.Instance.LoadPlayerData();
  46. await CreateArchiveAsync();
  47. }
  48. }
  49. catch (TapException ex)
  50. {
  51. LogTool.Error($"Failed to check/load archive: {ex.Code} - {ex.Message}");
  52. }
  53. catch (Exception ex)
  54. {
  55. LogTool.Error($"Unexpected error checking/loading archive: {ex.Message}");
  56. }
  57. }
  58. /// <summary>
  59. /// 创建存档
  60. /// </summary>
  61. public async CTask<string> CreateArchiveAsync()
  62. {
  63. try
  64. {
  65. // 创建存档元信息
  66. ArchiveMetadata metadata = new ArchiveMetadata(
  67. archiveName: "playerData",
  68. archiveSummary: "玩家数据",
  69. archiveExtra: "额外信息",
  70. archivePlaytime: 0
  71. );
  72. // 创建存档
  73. ArchiveData createdArchive =
  74. await TapTapCloudSave.CreateArchive(metadata, AccountFileInfo.Instance.persistentDataPath, null);
  75. AccountFileInfo.Instance.lasetSaveTime = System.DateTime.Now.Ticks;
  76. PlayerManager.Instance.Uuid = createdArchive.Uuid;
  77. LogTool.Error($"存档创建成功,UUID: {createdArchive.Uuid}");
  78. return createdArchive.Uuid;
  79. }
  80. catch (TapException ex)
  81. {
  82. LogTool.Error($"创建存档失败: {ex.Code} - {ex.Message}");
  83. throw;
  84. }
  85. catch (Exception ex)
  86. {
  87. LogTool.Error($"创建存档失败: {ex.Message}");
  88. throw;
  89. }
  90. }
  91. // 更新存档
  92. public async CTask UpdateArchiveAsync()
  93. {
  94. if (PlayerManager.Instance.Uuid == "")
  95. return;
  96. try
  97. {
  98. // 更新存档元信息
  99. ArchiveMetadata metadata = new ArchiveMetadata(
  100. archiveName: "playerData",
  101. archiveSummary: "玩家数据",
  102. archiveExtra: "额外信息",
  103. archivePlaytime: 0
  104. );
  105. // 更新存档
  106. ArchiveData updatedArchive =
  107. await TapTapCloudSave.UpdateArchive(PlayerManager.Instance.Uuid, metadata,
  108. AccountFileInfo.Instance.persistentDataPath,
  109. null);
  110. LogTool.Log($"存档更新成功,UUID: {updatedArchive.Uuid}");
  111. }
  112. catch (TapException ex)
  113. {
  114. LogTool.Error($"更新存档失败: {ex.Code} - {ex.Message}");
  115. throw;
  116. }
  117. catch (Exception ex)
  118. {
  119. LogTool.Error($"更新存档失败: {ex.Message}");
  120. throw;
  121. }
  122. }
  123. // 查询存档
  124. public async CTask LoadArchiveAsync()
  125. {
  126. try
  127. {
  128. // 获取存档列表
  129. List<ArchiveData> archives = await TapTapCloudSave.GetArchiveList();
  130. ArchiveData archive = archives[0];
  131. // 下载存档文件
  132. byte[] data =
  133. await TapTapCloudSave.GetArchiveData(PlayerManager.Instance.Uuid,
  134. archive.FileId);
  135. string str1 = Encoding.UTF8.GetString(data);
  136. LogTool.Log(str1);
  137. File.WriteAllBytes(AccountFileInfo.Instance.persistentDataPath, data);
  138. LogTool.Error("读取存档成功");
  139. }
  140. catch (TapException ex)
  141. {
  142. LogTool.Error($"加载存档失败: {ex.Code} - {ex.Message}");
  143. throw;
  144. }
  145. catch (Exception ex)
  146. {
  147. LogTool.Error($"加载存档失败: {ex.Message}");
  148. throw;
  149. }
  150. }
  151. // 删除存档
  152. public async Task DeleteArchiveAsync(string archiveUuid)
  153. {
  154. try
  155. {
  156. await TapTapCloudSave.DeleteArchive(archiveUuid);
  157. LogTool.Log($"存档删除成功,UUID: {archiveUuid}");
  158. }
  159. catch (TapException ex)
  160. {
  161. LogTool.Error($"删除存档失败: {ex.Code} - {ex.Message}");
  162. throw;
  163. }
  164. catch (Exception ex)
  165. {
  166. LogTool.Error($"删除存档失败: {ex.Message}");
  167. throw;
  168. }
  169. }
  170. }