"use strict"; cc._RF.push(module, 'cc227E9Yc9HiJvWj8ti9WZT', 'bridge.mods'); // Scripts/zbridge/mods/bridge.mods.js "use strict"; /****************************************************************** * * 桥接:控制器管理过渡 * ******************************************************************/ var MOD = require("nx.mod"); var BridgeMods = cc.Class({ "extends": MOD, name: "BridgeMods", // 初始化 initialize: function initialize(_args) { // USPER this._super(_args); // 单例列表 this.modules = []; // 访问接口(设置) nx.bridge.mods = this; return true; }, // 销毁 uninitialize: function uninitialize() { // 访问接口(关闭) nx.bridge.mods = null; // USPER return this._super(); }, // 模块载入 install: function install(_id, _key) { // 重复载入 if (CC_DEBUG) { if (nx.dt.arrMember(this.modules, null, function (m) { return m && m.__fkey == _key; })) { nx.error("$MODS:模块载入重复! ", _key); return; } } // 载入 var ref = require(_key); var mod = ref ? ref.getInstance(_id, _key, true) : null; if (!mod) { nx.error("$MODS:模块载入失败! ", _key); return; } // 初始化 mod.setFunctionID(_id, _key); mod.setFunctionLock(true); // 记录 this.modules.push(mod); nx.debug("$MODS:模块载入 ", _key); }, // 模块卸载 uninstall: function uninstall(_key) { nx.debug("$MODS:模块卸载 ", _key); nx.dt.arrDelete(this.modules, function (m) { return m && m.__fkey == _key; }); }, // 模块清空 uninstallAll: function uninstallAll() { this.modules = []; if (this.modTicker) { clearTimeout(this.modTicker); this.modTicker = 0; } }, // 初始化所有模块 initModules: function initModules(_cb) { nx.debug("$MODS:初始化所有模块..."); // 全部锁定 this.modules.forEach(function (mod) { mod.setFunctionLock(true); }); // 重新解锁 this.checkUnLock(_cb); }, // 首次解锁判定 checkUnLock: function checkUnLock(_cb) { // 统计待更新模块 var mods = []; for (var i = 0; i < this.modules.length; ++i) { // 无效/已经解锁/没有具体功能 var mod = this.modules[i]; if (!mod || !mod.__flock) { continue; } // 未解锁 var ret = nx.bridge.jumper.checkSource(mod.__fid); if (nx.dt.objNEmpty(ret)) { continue; } mod.setFunctionLock(false); mods.push(mod); } // 空 if (nx.dt.arrEmpty(mods)) { nx.dt.fnInvoke(_cb, true); return; } nx.debug("$MODS:功能模块更新...总共:%s 更新:%s", this.modules.length, mods.length); // 超时处理 var self = this; var timout = function timout(_name, _open) { if (self.modTicker) { clearTimeout(self.modTicker); self.modTicker = 0; } if (_open) { self.modTicker = setTimeout(function () { nx.warn(nx.text.format("ErrModTimeout", _name)); next(); }, 2000); } }; // 依次更新 var done = false; var next = function next() { // 结束 if (mods.length == 0) { if (!done) { nx.dt.fnInvoke(_cb, true); done = true; } return; } var mod = mods.shift(); nx.debug("$MODS:[%s]\t%s", mods.length, mod.__fkey); timout(mod.__fkey, true); mod.reqBaseFromServer(function (_ret, _data) { nx.debug("$MODS: done.\t\t", mod.__fkey, _ret); timout(mod.__fkey, false); next(); }); }; next(); } }); module.exports = BridgeMods; cc._RF.pop();