refactor(game): 重构游戏云端数据同步逻辑
1. 新增微信云函数双向同步接口,将时间戳对比逻辑移至云端完成 2. 简化初始化流程,合并云端登录与数据同步步骤 3. 重构GameDataSync类,统一同步流程并改为异步调用 4. 替换旧的getCloudData接口为新的syncFromCloud方法
This commit is contained in:
@@ -128,44 +128,21 @@ export class Initialize extends ecs.Entity {
|
||||
}
|
||||
|
||||
/**
|
||||
* 从云端加载数据(微信客户端)
|
||||
* 从云端加载数据(微信客户端,sync 模式)
|
||||
*/
|
||||
private async loadFromCloud() {
|
||||
try {
|
||||
// 1. 初始化微信云环境
|
||||
this.initWxCloudEnv();
|
||||
|
||||
// 2. 登录并获取云端数据
|
||||
const loginResult = await WxCloudApi.login();
|
||||
const response = loginResult.result;
|
||||
|
||||
if (response && response.code === 200) {
|
||||
mLogger.log(this.debugMode, 'Initialize', "[Initialize]: 云端登录成功");
|
||||
|
||||
const cloudData = response.data;
|
||||
|
||||
if (cloudData && cloudData.openid) {
|
||||
smc.data.openid = cloudData.openid;
|
||||
}
|
||||
|
||||
// 将 login 获取的 game_data 封装为统一下发格式,交给 gameDataSync 对比与合并
|
||||
const formattedCloudData = {
|
||||
openid: cloudData?.openid || '',
|
||||
data: cloudData?.game_data || {}
|
||||
};
|
||||
|
||||
gameDataSync.syncWithCloudData(formattedCloudData);
|
||||
|
||||
} else {
|
||||
mLogger.log(this.debugMode, 'Initialize', "[Initialize]: 云端登录失败:", response?.msg);
|
||||
// 登录失败时使用本地数据
|
||||
gameDataSync.syncWithCloudData(null);
|
||||
}
|
||||
// 2. 一次调用完成登录与双向数据同步(时间戳对比在云端完成)
|
||||
const cloudNewer = await gameDataSync.syncFromCloud();
|
||||
mLogger.log(this.debugMode, 'Initialize', `[Initialize]: 云端同步完成,云端数据较新=${cloudNewer}`);
|
||||
|
||||
} catch (error) {
|
||||
mLogger.log(this.debugMode, 'Initialize', "[Initialize]: 云端数据加载异常:", error);
|
||||
// 异常时使用本地数据兜底
|
||||
gameDataSync.syncWithCloudData(null);
|
||||
await gameDataSync.syncFromCloud();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,8 +151,8 @@ export class Initialize extends ecs.Entity {
|
||||
*/
|
||||
private async loadFromLocalDebug() {
|
||||
try {
|
||||
// 用本地调试数据覆盖客户端数据
|
||||
gameDataSync.syncWithCloudData(null);
|
||||
// 非微信客户端仅使用本地缓存数据
|
||||
await gameDataSync.syncFromCloud();
|
||||
} catch (error) {
|
||||
mLogger.log(this.debugMode, 'Initialize', "[Initialize]: 本地调试数据加载异常:", error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user