Files
fc/dev/project/library/imports/cc/cc22713d-61cf-4788-9bd6-8fcb62f56653.js
T

159 lines
3.7 KiB
JavaScript
Raw Normal View History

2026-05-24 10:21:26 +08:00
"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();