159 lines
3.7 KiB
JavaScript
159 lines
3.7 KiB
JavaScript
"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(); |