@zeewain/3d-avatar-sdk 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -4
- package/dist/examples/test-vue2/package.json +1 -1
- package/dist/examples/test-vue3/package.json +1 -1
- package/dist/examples/test-vue3/src/App.vue +7 -3
- package/dist/examples/test-vue3/src/components/BroadcastAPI.vue +270 -2
- package/dist/index.d.ts +428 -398
- package/dist/index.es5.js +195 -45
- package/dist/index.es5.umd.js +195 -45
- package/dist/index.esm.js +188 -48
- package/dist/index.umd.cjs +188 -48
- package/package.json +2 -1
package/dist/index.es5.umd.js
CHANGED
|
@@ -13256,7 +13256,7 @@
|
|
|
13256
13256
|
},
|
|
13257
13257
|
/** 生产环境配置 */
|
|
13258
13258
|
prod: {
|
|
13259
|
-
apiBaseUrl: 'https://
|
|
13259
|
+
apiBaseUrl: 'https://ai.zeewain3d.com'
|
|
13260
13260
|
}
|
|
13261
13261
|
};
|
|
13262
13262
|
/**
|
|
@@ -13267,7 +13267,7 @@
|
|
|
13267
13267
|
* @example
|
|
13268
13268
|
* ```typescript
|
|
13269
13269
|
* const config = getEnvConfig('prod');
|
|
13270
|
-
* console.log(config.apiBaseUrl); // https://
|
|
13270
|
+
* console.log(config.apiBaseUrl); // https://ai.zeewain3d.com/api/dh-talker
|
|
13271
13271
|
* ```
|
|
13272
13272
|
*/
|
|
13273
13273
|
function getEnvConfig(env, withApiModule) {
|
|
@@ -13766,6 +13766,8 @@
|
|
|
13766
13766
|
*/
|
|
13767
13767
|
var BroadcastTaskStatus;
|
|
13768
13768
|
(function (BroadcastTaskStatus) {
|
|
13769
|
+
/** 等待中(尚未开始请求) */
|
|
13770
|
+
BroadcastTaskStatus["PENDING"] = "pending";
|
|
13769
13771
|
/** 请求中 */
|
|
13770
13772
|
BroadcastTaskStatus["REQUESTING"] = "requesting";
|
|
13771
13773
|
/** 已完成 */
|
|
@@ -13835,7 +13837,7 @@
|
|
|
13835
13837
|
* @override
|
|
13836
13838
|
*/
|
|
13837
13839
|
BroadcastService.prototype.handleCallback = function (operation, code, message, data) {
|
|
13838
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
13840
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
13839
13841
|
// 提取 isBroadcastCompleted 参数
|
|
13840
13842
|
var isBroadcastCompleted = JSON.parse(data || '{}').isBroadcastCompleted;
|
|
13841
13843
|
// 先调用基类处理逻辑
|
|
@@ -13847,7 +13849,12 @@
|
|
|
13847
13849
|
if (isBroadcastCompleted) {
|
|
13848
13850
|
this.broadcastCompletedCount++;
|
|
13849
13851
|
var status_1 = this.getStatus();
|
|
13850
|
-
|
|
13852
|
+
// 判断是否所有任务都已完成:
|
|
13853
|
+
// 1. 没有待请求的任务 (PENDING)
|
|
13854
|
+
// 2. 没有正在请求的任务 (REQUESTING)
|
|
13855
|
+
// 3. Unity播放完成次数等于已完成任务数
|
|
13856
|
+
var isAllTasksCompleted = ((_a = status_1.queueInfo) === null || _a === void 0 ? void 0 : _a.pendingTasks) === 0 && ((_b = status_1.queueInfo) === null || _b === void 0 ? void 0 : _b.requestingTasks) === 0 && ((_c = status_1.queueInfo) === null || _c === void 0 ? void 0 : _c.completedTasks) === this.broadcastCompletedCount;
|
|
13857
|
+
if (isAllTasksCompleted) {
|
|
13851
13858
|
// 重置状态、计数
|
|
13852
13859
|
this.isBroadcastingAudio = false;
|
|
13853
13860
|
this.hasReceivedAudio = false;
|
|
@@ -13857,19 +13864,19 @@
|
|
|
13857
13864
|
this.logger.warn('Broadcast all completed');
|
|
13858
13865
|
}
|
|
13859
13866
|
// this.logger.warn('AAAAAA', { status: this.getStatus(), broadcastCompletedCount: this.broadcastCompletedCount });
|
|
13860
|
-
(
|
|
13867
|
+
(_e = (_d = this.callbacks).onFinish) === null || _e === void 0 ? void 0 : _e.call(_d);
|
|
13861
13868
|
}
|
|
13862
13869
|
break;
|
|
13863
13870
|
case exports.BroadcastOperationType.PAUSE_BROADCAST:
|
|
13864
|
-
(
|
|
13871
|
+
(_g = (_f = this.callbacks).onPause) === null || _g === void 0 ? void 0 : _g.call(_f);
|
|
13865
13872
|
this.logger.debug('Broadcast paused callback triggered');
|
|
13866
13873
|
break;
|
|
13867
13874
|
case exports.BroadcastOperationType.RESUME_BROADCAST:
|
|
13868
|
-
(
|
|
13875
|
+
(_j = (_h = this.callbacks).onResume) === null || _j === void 0 ? void 0 : _j.call(_h);
|
|
13869
13876
|
this.logger.debug('Broadcast resumed callback triggered');
|
|
13870
13877
|
break;
|
|
13871
13878
|
case exports.BroadcastOperationType.STOP_BROADCAST:
|
|
13872
|
-
(
|
|
13879
|
+
(_l = (_k = this.callbacks).onStop) === null || _l === void 0 ? void 0 : _l.call(_k);
|
|
13873
13880
|
this.logger.debug('Broadcast stopped callback triggered');
|
|
13874
13881
|
break;
|
|
13875
13882
|
}
|
|
@@ -13931,7 +13938,7 @@
|
|
|
13931
13938
|
// 重置序号计数器
|
|
13932
13939
|
this.taskSequence = 0;
|
|
13933
13940
|
this.currentSendingSequence = 0;
|
|
13934
|
-
// 通知Unity
|
|
13941
|
+
// 通知Unity开始新任务(清空队列),这里不使用sendAsyncMessage,因为startBroadcast不需要等待完成,而是在任务播报完成后通过回调通知
|
|
13935
13942
|
this.sendMessage('StartBroadcast', {
|
|
13936
13943
|
callbackFun: this.uniqueCallbackName,
|
|
13937
13944
|
operationType: exports.BroadcastOperationType.START_BROADCAST,
|
|
@@ -14084,6 +14091,9 @@
|
|
|
14084
14091
|
* @description 获取当前播报服务的状态信息,包括队列状态
|
|
14085
14092
|
*/
|
|
14086
14093
|
BroadcastService.prototype.getStatus = function () {
|
|
14094
|
+
var pendingTasks = this.taskQueue.filter(function (t) {
|
|
14095
|
+
return t.status === BroadcastTaskStatus.PENDING;
|
|
14096
|
+
}).length;
|
|
14087
14097
|
var completedTasks = this.taskQueue.filter(function (t) {
|
|
14088
14098
|
return t.status === BroadcastTaskStatus.COMPLETED;
|
|
14089
14099
|
}).length;
|
|
@@ -14097,7 +14107,7 @@
|
|
|
14097
14107
|
return sum + t.pendingResponses.length;
|
|
14098
14108
|
}, 0);
|
|
14099
14109
|
var currentSendingSequence = this.currentSendingSequence;
|
|
14100
|
-
var isGeneratingAudio =
|
|
14110
|
+
var isGeneratingAudio = pendingTasks + requestingTasks > 0;
|
|
14101
14111
|
return {
|
|
14102
14112
|
isActive: this.isBroadcastingAudio || isGeneratingAudio,
|
|
14103
14113
|
// 是否正在播报音频或正在生成音频
|
|
@@ -14105,6 +14115,7 @@
|
|
|
14105
14115
|
hasReceivedAudio: this.hasReceivedAudio,
|
|
14106
14116
|
queueInfo: {
|
|
14107
14117
|
totalTasks: this.taskQueue.length,
|
|
14118
|
+
pendingTasks: pendingTasks,
|
|
14108
14119
|
requestingTasks: requestingTasks,
|
|
14109
14120
|
completedTasks: completedTasks,
|
|
14110
14121
|
failedTasks: failedTasks,
|
|
@@ -14138,7 +14149,7 @@
|
|
|
14138
14149
|
id: "broadcast_".concat(Date.now(), "_").concat(Math.random().toString(36).substring(2, 9)),
|
|
14139
14150
|
sequence: ++this.taskSequence,
|
|
14140
14151
|
params: params,
|
|
14141
|
-
status: BroadcastTaskStatus.
|
|
14152
|
+
status: BroadcastTaskStatus.PENDING,
|
|
14142
14153
|
controller: new AbortController(),
|
|
14143
14154
|
pendingResponses: [],
|
|
14144
14155
|
isGenerationComplete: false,
|
|
@@ -14153,53 +14164,67 @@
|
|
|
14153
14164
|
/**
|
|
14154
14165
|
* 添加任务到队列
|
|
14155
14166
|
* @param task - 播报任务
|
|
14156
|
-
* @description
|
|
14167
|
+
* @description 将任务添加到队列,只有当没有正在请求的任务时才开始请求(串行请求模式)
|
|
14157
14168
|
* @private
|
|
14158
14169
|
*/
|
|
14159
14170
|
BroadcastService.prototype.addTaskToQueue = function (task) {
|
|
14160
14171
|
this.taskQueue.push(task);
|
|
14161
14172
|
this.logger.debug('Task added to queue', {
|
|
14162
14173
|
taskId: task.id,
|
|
14174
|
+
params: task.params,
|
|
14163
14175
|
queueLength: this.taskQueue.length
|
|
14164
14176
|
});
|
|
14165
|
-
//
|
|
14166
|
-
this.
|
|
14177
|
+
// 检查是否有正在请求的任务
|
|
14178
|
+
var hasRequestingTask = this.taskQueue.some(function (t) {
|
|
14179
|
+
return t.status === BroadcastTaskStatus.REQUESTING;
|
|
14180
|
+
});
|
|
14181
|
+
// 只有当没有正在请求的任务时,才开始当前任务的请求
|
|
14182
|
+
if (!hasRequestingTask) {
|
|
14183
|
+
this.startTaskRequest(task);
|
|
14184
|
+
} else {
|
|
14185
|
+
this.logger.debug('Task queued, waiting for previous task to complete', {
|
|
14186
|
+
taskId: task.id,
|
|
14187
|
+
pendingTasks: this.taskQueue.filter(function (t) {
|
|
14188
|
+
return t.status === BroadcastTaskStatus.PENDING;
|
|
14189
|
+
}).length
|
|
14190
|
+
});
|
|
14191
|
+
}
|
|
14167
14192
|
// 开始处理队列
|
|
14168
|
-
this.
|
|
14193
|
+
this.processTaskQueue();
|
|
14169
14194
|
};
|
|
14170
14195
|
/**
|
|
14171
14196
|
* 处理队列
|
|
14172
|
-
* @description
|
|
14197
|
+
* @description 处理队列中的任务响应,按序号发送给unity播放
|
|
14173
14198
|
* @private
|
|
14174
14199
|
*/
|
|
14175
|
-
BroadcastService.prototype.
|
|
14200
|
+
BroadcastService.prototype.processTaskQueue = function () {
|
|
14176
14201
|
var _this = this;
|
|
14177
14202
|
// 启动队列处理定时器(如果尚未启动)
|
|
14178
14203
|
if (!this.queueProcessTimer) {
|
|
14179
14204
|
this.queueProcessTimer = setInterval(function () {
|
|
14180
|
-
_this.
|
|
14205
|
+
_this.processTaskQueueStep();
|
|
14181
14206
|
}, 100); // 每100ms检查一次队列状态
|
|
14182
14207
|
}
|
|
14183
14208
|
// 立即处理一次
|
|
14184
|
-
this.
|
|
14209
|
+
this.processTaskQueueStep();
|
|
14185
14210
|
};
|
|
14186
14211
|
/**
|
|
14187
14212
|
* 队列处理步骤
|
|
14188
|
-
* @description
|
|
14213
|
+
* @description 处理队列中的单个步骤,按序号发送给unity播放
|
|
14189
14214
|
* @private
|
|
14190
14215
|
*/
|
|
14191
|
-
BroadcastService.prototype.
|
|
14216
|
+
BroadcastService.prototype.processTaskQueueStep = function () {
|
|
14192
14217
|
var _this = this;
|
|
14193
|
-
//
|
|
14218
|
+
// 按序号找到下一个要处理的任务(只处理已开始请求的任务,排除 PENDING 状态)
|
|
14194
14219
|
var nextTask = this.taskQueue.find(function (task) {
|
|
14195
|
-
return task.sequence === _this.currentSendingSequence + 1 && task.pendingResponses.length > 0;
|
|
14220
|
+
return task.sequence === _this.currentSendingSequence + 1 && task.status !== BroadcastTaskStatus.PENDING && task.pendingResponses.length > 0;
|
|
14196
14221
|
});
|
|
14197
14222
|
if (nextTask) {
|
|
14198
14223
|
this.sendNextResponse(nextTask);
|
|
14199
14224
|
}
|
|
14200
|
-
//
|
|
14225
|
+
// 如果队列中没有剩余任务(排除待处理、已完成、失败和取消的任务),则停止定时器
|
|
14201
14226
|
var remainingTasks = this.taskQueue.filter(function (task) {
|
|
14202
|
-
return task.status !== BroadcastTaskStatus.COMPLETED && task.status !== BroadcastTaskStatus.FAILED && task.status !== BroadcastTaskStatus.CANCELLED;
|
|
14227
|
+
return task.status !== BroadcastTaskStatus.PENDING && task.status !== BroadcastTaskStatus.COMPLETED && task.status !== BroadcastTaskStatus.FAILED && task.status !== BroadcastTaskStatus.CANCELLED;
|
|
14203
14228
|
});
|
|
14204
14229
|
if (remainingTasks.length === 0) {
|
|
14205
14230
|
this.clearQueueProcessTimer();
|
|
@@ -14213,7 +14238,7 @@
|
|
|
14213
14238
|
*/
|
|
14214
14239
|
BroadcastService.prototype.startTaskRequest = function (task) {
|
|
14215
14240
|
return __awaiter(this, void 0, void 0, function () {
|
|
14216
|
-
var apiUrl, requestBody;
|
|
14241
|
+
var apiUrl, requestBody, sdkError;
|
|
14217
14242
|
var _this = this;
|
|
14218
14243
|
var _a;
|
|
14219
14244
|
return __generator(this, function (_b) {
|
|
@@ -14248,6 +14273,25 @@
|
|
|
14248
14273
|
body: JSON.stringify(requestBody),
|
|
14249
14274
|
signal: task.controller.signal,
|
|
14250
14275
|
openWhenHidden: true,
|
|
14276
|
+
/**
|
|
14277
|
+
* 连接建立时的回调,用于检查 HTTP 状态码
|
|
14278
|
+
* @param response - HTTP 响应对象
|
|
14279
|
+
* @throws {SDKError} 当 HTTP 状态码异常时抛出对应的 SDKError
|
|
14280
|
+
*/
|
|
14281
|
+
onopen: function onopen(response) {
|
|
14282
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
14283
|
+
var error;
|
|
14284
|
+
return __generator(this, function (_a) {
|
|
14285
|
+
// 检查 HTTP 状态码,处理 401 token 过期等异常
|
|
14286
|
+
if (!response.ok) {
|
|
14287
|
+
error = this.createHttpError(response.status, response.statusText, task.id);
|
|
14288
|
+
this.handleTaskError(task, error);
|
|
14289
|
+
throw error;
|
|
14290
|
+
}
|
|
14291
|
+
return [2 /*return*/];
|
|
14292
|
+
});
|
|
14293
|
+
});
|
|
14294
|
+
},
|
|
14251
14295
|
onmessage: function onmessage(event) {
|
|
14252
14296
|
_this.handleTaskResponse(task, event.data);
|
|
14253
14297
|
},
|
|
@@ -14255,12 +14299,15 @@
|
|
|
14255
14299
|
_this.handleTaskClose(task);
|
|
14256
14300
|
},
|
|
14257
14301
|
onerror: function onerror(error) {
|
|
14258
|
-
|
|
14259
|
-
|
|
14302
|
+
// 将所有异常统一转换为 SDKError
|
|
14303
|
+
var sdkError = _this.convertToSDKError(error, task.id);
|
|
14304
|
+
_this.handleTaskError(task, sdkError);
|
|
14305
|
+
throw sdkError;
|
|
14260
14306
|
}
|
|
14261
14307
|
});
|
|
14262
14308
|
} catch (error) {
|
|
14263
|
-
this.
|
|
14309
|
+
sdkError = this.convertToSDKError(error, task.id);
|
|
14310
|
+
this.handleTaskError(task, sdkError);
|
|
14264
14311
|
}
|
|
14265
14312
|
return [2 /*return*/];
|
|
14266
14313
|
});
|
|
@@ -14278,7 +14325,7 @@
|
|
|
14278
14325
|
var response = JSON.parse(data);
|
|
14279
14326
|
// 错误处理
|
|
14280
14327
|
if (response.code !== 0) {
|
|
14281
|
-
this.handleBroadcastError(response.code);
|
|
14328
|
+
this.handleBroadcastError(response.code, response.message);
|
|
14282
14329
|
return;
|
|
14283
14330
|
}
|
|
14284
14331
|
// 处理音频数据
|
|
@@ -14292,6 +14339,7 @@
|
|
|
14292
14339
|
task.pendingResponses.push(response);
|
|
14293
14340
|
this.logger.debug('Response added to task', {
|
|
14294
14341
|
taskId: task.id,
|
|
14342
|
+
response: response,
|
|
14295
14343
|
pendingCount: task.pendingResponses.length
|
|
14296
14344
|
});
|
|
14297
14345
|
// 检查是否完成
|
|
@@ -14304,13 +14352,13 @@
|
|
|
14304
14352
|
}
|
|
14305
14353
|
}
|
|
14306
14354
|
} catch (error) {
|
|
14307
|
-
this.handleTaskError(task, error);
|
|
14355
|
+
this.handleTaskError(task, new SDKError(exports.OperationErrorCode.OPERATION_FAILED, typeof error === 'string' ? error : error.message || '播报服务错误'));
|
|
14308
14356
|
}
|
|
14309
14357
|
};
|
|
14310
14358
|
/**
|
|
14311
|
-
*
|
|
14359
|
+
* 发送下一个响应给unity播放
|
|
14312
14360
|
* @param task - 播报任务
|
|
14313
|
-
* @description
|
|
14361
|
+
* @description 发送任务的响应数组中的第一个待发送响应到Unity(按顺序发送),发送后立即删除
|
|
14314
14362
|
* @private
|
|
14315
14363
|
*/
|
|
14316
14364
|
BroadcastService.prototype.sendNextResponse = function (task) {
|
|
@@ -14325,7 +14373,7 @@
|
|
|
14325
14373
|
remainingResponses: task.pendingResponses.length,
|
|
14326
14374
|
voiceUrl: (_a = response.data) === null || _a === void 0 ? void 0 : _a.voiceUrl
|
|
14327
14375
|
});
|
|
14328
|
-
// 发送响应到Unity
|
|
14376
|
+
// 发送响应到Unity,这里不使用sendAsyncMessage,因为appendBroadcast不需要等待完成,而是在任务播报完成后通过startBroadcast回调通知
|
|
14329
14377
|
this.sendMessage('AppendBroadcast', {
|
|
14330
14378
|
response: response,
|
|
14331
14379
|
callbackFun: this.uniqueCallbackName,
|
|
@@ -14343,7 +14391,7 @@
|
|
|
14343
14391
|
/**
|
|
14344
14392
|
* 处理任务关闭
|
|
14345
14393
|
* @param task - 播报任务
|
|
14346
|
-
* @description
|
|
14394
|
+
* @description 处理任务的流式连接关闭,并启动下一个待处理任务的请求
|
|
14347
14395
|
* @private
|
|
14348
14396
|
*/
|
|
14349
14397
|
BroadcastService.prototype.handleTaskClose = function (task) {
|
|
@@ -14354,20 +14402,26 @@
|
|
|
14354
14402
|
if (!task.isGenerationComplete && task.status === BroadcastTaskStatus.REQUESTING) {
|
|
14355
14403
|
task.isGenerationComplete = true;
|
|
14356
14404
|
}
|
|
14405
|
+
// 当前任务请求完成后(流断开后),启动下一个待处理任务的请求
|
|
14406
|
+
this.startNextPendingTask();
|
|
14357
14407
|
};
|
|
14358
14408
|
/**
|
|
14359
14409
|
* 处理任务错误
|
|
14360
14410
|
* @param task - 播报任务
|
|
14361
14411
|
* @param error - 错误对象
|
|
14362
|
-
* @description
|
|
14412
|
+
* @description 处理任务执行过程中的错误,防止重复触发错误回调,并启动下一个待处理任务
|
|
14363
14413
|
* @private
|
|
14364
14414
|
*/
|
|
14365
14415
|
BroadcastService.prototype.handleTaskError = function (task, error) {
|
|
14366
14416
|
var _a, _b;
|
|
14417
|
+
// 如果任务已经是失败或取消状态,不再重复处理,防止回调被多次触发
|
|
14418
|
+
if (task.status === BroadcastTaskStatus.FAILED || task.status === BroadcastTaskStatus.CANCELLED) {
|
|
14419
|
+
return;
|
|
14420
|
+
}
|
|
14367
14421
|
task.status = BroadcastTaskStatus.FAILED;
|
|
14368
14422
|
task.error = error;
|
|
14369
14423
|
this.logger.error("Task failed - ".concat(task.id), error);
|
|
14370
|
-
//
|
|
14424
|
+
// 触发错误回调(只触发一次)
|
|
14371
14425
|
(_b = (_a = this.callbacks).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
|
|
14372
14426
|
};
|
|
14373
14427
|
/**
|
|
@@ -14478,10 +14532,11 @@
|
|
|
14478
14532
|
/**
|
|
14479
14533
|
* 处理播报错误
|
|
14480
14534
|
* @param errorCode - 错误码
|
|
14535
|
+
* @param errorMessage - 错误消息
|
|
14481
14536
|
* @description 处理播报过程中的错误
|
|
14482
14537
|
* @private
|
|
14483
14538
|
*/
|
|
14484
|
-
BroadcastService.prototype.handleBroadcastError = function (errorCode) {
|
|
14539
|
+
BroadcastService.prototype.handleBroadcastError = function (errorCode, errorMessage) {
|
|
14485
14540
|
// 用户权益额度不存在错误码 14001
|
|
14486
14541
|
// 用户权益额度不足错误码 14002
|
|
14487
14542
|
// 用户权益额度冻结失败 14003
|
|
@@ -14496,10 +14551,32 @@
|
|
|
14496
14551
|
this.handleError(new SDKError(exports.OperationErrorCode.BROADCAST_EQUITY_FREEZE_FAILED, '用户权益额度冻结失败'));
|
|
14497
14552
|
break;
|
|
14498
14553
|
default:
|
|
14499
|
-
this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED,
|
|
14554
|
+
this.handleError(new SDKError(exports.OperationErrorCode.OPERATION_FAILED, "".concat(errorMessage, "(").concat(errorCode, ")") || "\u64AD\u62A5\u670D\u52A1\u9519\u8BEF(".concat(errorCode, ")")));
|
|
14500
14555
|
break;
|
|
14501
14556
|
}
|
|
14502
14557
|
};
|
|
14558
|
+
/**
|
|
14559
|
+
* 启动下一个待处理任务的请求
|
|
14560
|
+
* @description 在当前任务请求完成或失败后,检查并启动下一个待处理任务
|
|
14561
|
+
* @private
|
|
14562
|
+
*/
|
|
14563
|
+
BroadcastService.prototype.startNextPendingTask = function () {
|
|
14564
|
+
// 查找下一个待处理的任务(按序号排序,取第一个 PENDING 状态的任务)
|
|
14565
|
+
var nextPendingTask = this.taskQueue.filter(function (t) {
|
|
14566
|
+
return t.status === BroadcastTaskStatus.PENDING;
|
|
14567
|
+
}).sort(function (a, b) {
|
|
14568
|
+
return a.sequence - b.sequence;
|
|
14569
|
+
})[0];
|
|
14570
|
+
if (nextPendingTask) {
|
|
14571
|
+
this.logger.debug('Starting next pending task', {
|
|
14572
|
+
taskId: nextPendingTask.id,
|
|
14573
|
+
sequence: nextPendingTask.sequence
|
|
14574
|
+
});
|
|
14575
|
+
this.startTaskRequest(nextPendingTask);
|
|
14576
|
+
} else {
|
|
14577
|
+
this.logger.debug('No pending tasks to start');
|
|
14578
|
+
}
|
|
14579
|
+
};
|
|
14503
14580
|
/**
|
|
14504
14581
|
* 清理队列处理定时器
|
|
14505
14582
|
* @description 清理队列处理定时器
|
|
@@ -14509,8 +14586,77 @@
|
|
|
14509
14586
|
if (this.queueProcessTimer) {
|
|
14510
14587
|
clearInterval(this.queueProcessTimer);
|
|
14511
14588
|
this.queueProcessTimer = null;
|
|
14589
|
+
this.logger.debug('Queue process timer cleared');
|
|
14512
14590
|
}
|
|
14513
14591
|
};
|
|
14592
|
+
/**
|
|
14593
|
+
* 根据 HTTP 状态码创建对应的 SDKError
|
|
14594
|
+
* @param status - HTTP 状态码
|
|
14595
|
+
* @param statusText - HTTP 状态文本
|
|
14596
|
+
* @param taskId - 任务 ID(用于日志记录)
|
|
14597
|
+
* @returns SDKError 实例
|
|
14598
|
+
* @description 将 HTTP 错误状态码映射为对应的 SDKError
|
|
14599
|
+
* @private
|
|
14600
|
+
*/
|
|
14601
|
+
BroadcastService.prototype.createHttpError = function (status, statusText, taskId) {
|
|
14602
|
+
this.logger.warn("HTTP error occurred - Task: ".concat(taskId, ", Status: ").concat(status), {
|
|
14603
|
+
status: status,
|
|
14604
|
+
statusText: statusText
|
|
14605
|
+
});
|
|
14606
|
+
switch (status) {
|
|
14607
|
+
case 401:
|
|
14608
|
+
// Token 过期或未授权
|
|
14609
|
+
return new SDKError(exports.NetworkErrorCode.UNAUTHORIZED, "Token \u5DF2\u8FC7\u671F\u6216\u65E0\u6548\uFF0C\u8BF7\u91CD\u65B0\u6388\u6743 (HTTP ".concat(status, ")"));
|
|
14610
|
+
case 403:
|
|
14611
|
+
// 禁止访问
|
|
14612
|
+
return new SDKError(exports.NetworkErrorCode.UNAUTHORIZED, "\u65E0\u6743\u9650\u8BBF\u95EE\u8BE5\u8D44\u6E90 (HTTP ".concat(status, ")"));
|
|
14613
|
+
case 404:
|
|
14614
|
+
// 资源不存在
|
|
14615
|
+
return new SDKError(exports.NetworkErrorCode.SERVER_ERROR, "\u8BF7\u6C42\u7684\u8D44\u6E90\u4E0D\u5B58\u5728 (HTTP ".concat(status, ")"));
|
|
14616
|
+
case 500:
|
|
14617
|
+
case 502:
|
|
14618
|
+
case 503:
|
|
14619
|
+
case 504:
|
|
14620
|
+
// 服务器错误
|
|
14621
|
+
return new SDKError(exports.NetworkErrorCode.SERVER_ERROR, "\u670D\u52A1\u5668\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5 (HTTP ".concat(status, ")"));
|
|
14622
|
+
default:
|
|
14623
|
+
// 其他 HTTP 错误
|
|
14624
|
+
return new SDKError(exports.NetworkErrorCode.CONNECTION_FAILED, "\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25: ".concat(statusText || 'Unknown Error', " (HTTP ").concat(status, ")"));
|
|
14625
|
+
}
|
|
14626
|
+
};
|
|
14627
|
+
/**
|
|
14628
|
+
* 将任意错误转换为 SDKError
|
|
14629
|
+
* @param error - 原始错误对象
|
|
14630
|
+
* @param taskId - 任务 ID(用于日志记录)
|
|
14631
|
+
* @returns SDKError 实例
|
|
14632
|
+
* @description 统一将各种类型的错误转换为 SDKError,便于上层统一处理
|
|
14633
|
+
* @private
|
|
14634
|
+
*/
|
|
14635
|
+
BroadcastService.prototype.convertToSDKError = function (error, taskId) {
|
|
14636
|
+
// 如果已经是 SDKError,直接返回
|
|
14637
|
+
if (error instanceof SDKError) {
|
|
14638
|
+
return error;
|
|
14639
|
+
}
|
|
14640
|
+
// 如果是普通 Error 对象
|
|
14641
|
+
if (error instanceof Error) {
|
|
14642
|
+
// 检查是否是网络相关的错误
|
|
14643
|
+
var errorMessage_1 = error.message.toLowerCase();
|
|
14644
|
+
if (errorMessage_1.includes('timeout') || errorMessage_1.includes('timed out')) {
|
|
14645
|
+
return new SDKError(exports.NetworkErrorCode.REQUEST_TIMEOUT, "\u8BF7\u6C42\u8D85\u65F6 - Task: ".concat(taskId), error);
|
|
14646
|
+
}
|
|
14647
|
+
if (errorMessage_1.includes('network') || errorMessage_1.includes('fetch') || errorMessage_1.includes('connection')) {
|
|
14648
|
+
return new SDKError(exports.NetworkErrorCode.CONNECTION_FAILED, "\u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25 - Task: ".concat(taskId, ": ").concat(error.message), error);
|
|
14649
|
+
}
|
|
14650
|
+
if (errorMessage_1.includes('abort') || errorMessage_1.includes('cancel')) {
|
|
14651
|
+
return new SDKError(exports.OperationErrorCode.OPERATION_CANCELLED, "\u64CD\u4F5C\u5DF2\u53D6\u6D88 - Task: ".concat(taskId), error);
|
|
14652
|
+
}
|
|
14653
|
+
// 默认作为操作失败处理
|
|
14654
|
+
return new SDKError(exports.OperationErrorCode.OPERATION_FAILED, "\u64AD\u62A5\u4EFB\u52A1\u6267\u884C\u5931\u8D25 - Task: ".concat(taskId, ": ").concat(error.message), error);
|
|
14655
|
+
}
|
|
14656
|
+
// 如果是字符串或其他类型
|
|
14657
|
+
var errorMessage = String(error);
|
|
14658
|
+
return new SDKError(exports.OperationErrorCode.OPERATION_FAILED, "\u64AD\u62A5\u4EFB\u52A1\u6267\u884C\u5931\u8D25 - Task: ".concat(taskId, ": ").concat(errorMessage));
|
|
14659
|
+
};
|
|
14514
14660
|
return BroadcastService;
|
|
14515
14661
|
}(UnityBaseService);
|
|
14516
14662
|
|
|
@@ -14648,6 +14794,7 @@
|
|
|
14648
14794
|
*/
|
|
14649
14795
|
ZEEAvatarLoader.prototype.initGlobalConfig = function () {
|
|
14650
14796
|
var config = ConfigManager.getInstance().getConfig();
|
|
14797
|
+
var assetsFrom = config.assetsFrom;
|
|
14651
14798
|
var globalParams = {
|
|
14652
14799
|
token: config === null || config === void 0 ? void 0 : config.token,
|
|
14653
14800
|
apiBaseUrl: ConfigManager.getInstance().getApiBaseUrl(false),
|
|
@@ -14655,14 +14802,17 @@
|
|
|
14655
14802
|
// 純AB包方案在SDK 2.1.0 中已弃用
|
|
14656
14803
|
// assetsUrl: config?.assetsUrl
|
|
14657
14804
|
};
|
|
14658
|
-
var assetModuleParams = {
|
|
14659
|
-
isZip: true,
|
|
14660
|
-
assetBundlePath: config === null || config === void 0 ? void 0 : config.assetsUrl
|
|
14661
|
-
};
|
|
14662
14805
|
this.unityInstance.SendMessage('AvatarSDK', 'InitializeConfig', JSON.stringify(globalParams));
|
|
14663
|
-
this.unityInstance.SendMessage('AvatarSDK', 'InitAssetBundleModule', JSON.stringify(assetModuleParams));
|
|
14664
14806
|
console.warn('[ Send Unity message ]: AvatarSDK.InitializeConfig', globalParams);
|
|
14665
|
-
|
|
14807
|
+
//
|
|
14808
|
+
if (assetsFrom !== 'cloud') {
|
|
14809
|
+
var assetModuleParams = {
|
|
14810
|
+
isZip: true,
|
|
14811
|
+
assetBundlePath: config === null || config === void 0 ? void 0 : config.assetsUrl
|
|
14812
|
+
};
|
|
14813
|
+
this.unityInstance.SendMessage('AvatarSDK', 'InitAssetBundleModule', JSON.stringify(assetModuleParams));
|
|
14814
|
+
console.warn('[ Send Unity message ]: AvatarSDK.InitAssetBundleModule', assetModuleParams);
|
|
14815
|
+
}
|
|
14666
14816
|
};
|
|
14667
14817
|
return ZEEAvatarLoader;
|
|
14668
14818
|
}();
|