UNPKG

olympus-r-egret

Version:

Olympus的Egret表现层库

145 lines (144 loc) 6.38 kB
import * as tslib_1 from "tslib"; import { environment } from "olympus-r/engine/env/Environment"; import { panelManager } from "olympus-r/engine/panel/PanelManager"; import { platformManager } from "olympus-r/engine/platform/PlatformManager"; import { version } from "olympus-r/engine/version/Version"; var ResourceVersionController = /** @class */ (function () { function ResourceVersionController() { } ResourceVersionController.prototype.init = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { return [2 /*return*/]; }); }); }; ResourceVersionController.prototype.fetchVersion = function (callback) { // 直接回调,版本号已于之前加载完毕 callback.onSuccess(null); }; ResourceVersionController.prototype.getVirtualUrl = function (url) { // 添加imgDomain url = environment.toCDNHostURL(url); // 添加版本号,有哈希值就用哈希值加载,没有就用编译版本号加载 url = version.wrapHashUrl(url); // 返回url return url; }; return ResourceVersionController; }()); export { ResourceVersionController }; var AssetsLoader = /** @class */ (function () { function AssetsLoader(handler) { this._retryDict = {}; this._handler = handler; } AssetsLoader.prototype.loadGroups = function (groups) { // 调用回调 this._handler.start && this._handler.start(); // 组名如果是空字符串则会导致Egret什么都不干,所以要移除空字符串的组名 groups = groups && groups.filter(function (group) { if (typeof group == "string") return (group != ""); else return (group.name != ""); }); // 开始加载 var groupDict = {}; var pgsDict; var len = groups ? groups.length : 0; if (len == 0) { this._handler.complete && this._handler.complete(groupDict); } else { RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS, onProgress, this); RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, onOneComplete, this); RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, onOneError, this); var temp = groups.concat(); pgsDict = {}; for (var i in groups) { var group = groups[i]; if (typeof group == "string") { pgsDict[group] = 0; RES.loadGroup(group); } else { pgsDict[group.name] = 0; RES.loadGroup(group.name, group.priority); } } } function onProgress(evt) { // 填充资源字典 var itemDict = groupDict[evt.groupName]; if (!itemDict) groupDict[evt.groupName] = itemDict = {}; itemDict[evt.resItem.name] = evt.resItem; // 计算总进度 pgsDict[evt.groupName] = evt.itemsLoaded / evt.itemsTotal; var pgs = 0; for (var key in pgsDict) { pgs += pgsDict[key]; } pgs /= len; // 回调 this._handler.progress && this._handler.progress(evt.resItem, pgs); } function onOneComplete(evt) { // 调用单一完毕回调 this._handler.oneComplete && this._handler.oneComplete(groupDict[evt.groupName]); // 测试是否全部完毕 var index = temp.indexOf(evt.groupName); if (index >= 0) { // 移除加载组名 temp.splice(index, 1); // 判断是否全部完成 if (temp.length == 0) { // 移除事件监听 RES.removeEventListener(RES.ResourceEvent.GROUP_PROGRESS, onProgress, this); RES.removeEventListener(RES.ResourceEvent.GROUP_COMPLETE, onOneComplete, this); RES.removeEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, onOneError, this); // 调用回调 this._handler.complete && this._handler.complete(groupDict); } } } function onOneError(evt) { var groupName = evt.groupName; var retryTimes = this._retryDict[groupName]; if (retryTimes == null) retryTimes = 0; if (retryTimes < 3) { this._retryDict[groupName] = ++retryTimes; // 打印日志 console.warn("加载失败,重试第" + retryTimes + "次: " + groupName); // 没到最大重试次数,将为url添加一个随机时间戳重新加回加载队列 RES.loadGroup(evt.groupName); } else { // 打印日志 console.warn("加载失败3次,正在尝试切换CDN..."); // 尝试切换CDN var allDone = environment.nextCDN(); if (!allDone) { // 重新加载 RES.loadGroup(evt.groupName); } else { // 移除事件监听 RES.removeEventListener(RES.ResourceEvent.GROUP_PROGRESS, onProgress, this); RES.removeEventListener(RES.ResourceEvent.GROUP_COMPLETE, onOneComplete, this); RES.removeEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, onOneError, this); // 调用模板方法 this._handler.oneError && this._handler.oneError(evt); // 切换CDN失败了,弹出提示,使用户可以手动刷新页面 panelManager.confirm("资源组加载失败[" + groupName + "],点击确定刷新页面", function () { platformManager.reload(); }); } } } }; return AssetsLoader; }()); export default AssetsLoader;