mm_connector
Version:
这是超级美眉游戏连接器,用于连接客户端和服务端,实现前后端安全通讯。
274 lines (251 loc) • 5.2 kB
JavaScript
const Index = require('mm_machine').Index;
const Drive = require('./drive');
/**
* App应用类
* @extends {Index}
* @class
*/
class App extends Index {
/**
* 构造函数
* @param {Object} scope 作用域
* @param {String} title 标题
* @constructor
*/
constructor(scope, title) {
super(scope, __dirname);
this.Drive = Drive;
this.type = "app";
this.title = title;
this.apps = {};
}
}
/**
* 执行程序
* @param {Object} param1 参数1
* @param {Object} param2 参数2
* @return {Object} 返回执行结果
*/
App.prototype.run = function(param1, param2) {
var ret;
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
if (o.onOff) {
ret = o.run(param1, param2);
if (ret && o.end) {
break;
}
}
}
return ret;
};
/**
* 执行应用方法
* @param {String} name 应用名称
* @param {String} method 方法名称
* @param {Object} option 配置参数
* @return {String} 执行结果
*/
App.prototype.exec = function(name, method, option) {
var ret = "";
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
var name = o.config.name;
if (o.onOff && name === name) {
var func = o[method];
if (func) {
ret = func(option);
}
break;
}
}
return ret;
};
/**
* 初始化应用
* @param {Object} option 配置参数
* @return {String} 执行结果
*/
App.prototype.init = function(option) {
var ret = "";
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
ret = o.init(option);
}
return ret;
};
App.prototype.sort = function() {
this.list.sortBy('sort');
};
/**
* 加载应用
* @param {String} path 检索路径
* @param {Boolean} isApp 是否APP
*/
App.prototype.load = function(path) {
if (!path) {
path = '/' + this.scope + "/";
}
var list = this.list;
var list_scope = $.dir.get(path);
// 遍历目录路径
list_scope.map(function(o) {
var file = './app.json'.fullname(o);
if (file.hasFile()) {
var obj = new Drive(o);
obj.load(file);
if (obj.config.name) {
list.push(obj);
}
}
});
};
/**
* 下载应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.download = async function(name) {
}
/**
* 删除应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.remove = async function(name) {
var obj = this.list.get(name);
if (obj) {
console.log("文件", obj);
return $.ret.bl(true, "删除成功!");
}
return $.ret.bl(false, "应用已删除或不存在!");
}
/**
* 保存状态
*/
App.prototype.saveState = function() {
(this.path).saveJson(this.apps);
};
/**
* 安装应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.install = async function(name, option) {
var obj = this.list.get(name);
if (obj) {
obj.install(option);
this.apps[name] = 1;
this.saveState();
}
};
/**
* 卸载应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.uninstall = async function(name, option) {
var obj = this.list.get(name);
if (obj) {
obj.uninstall(option);
}
delete this.apps[name];
this.saveState();
};
/**
* 启动应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.start = async function(name, option) {
if (name) {
var obj = this.list.get(name);
if (obj) {
obj.onOff = true;
obj.start(option);
this.apps[name] = 2;
}
} else {
var list = this.list;
for (var i = 0, o; o = list[i++];) {
o.onOff = true;
o.start(option);
this.apps[o.name] = 2;
}
}
this.saveState();
};
/**
* 暂停应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.stop = async function(name, option) {
if (name) {
var obj = this.list.get(name);
if (obj) {
obj.onOff = false;
obj.stop(option);
this.apps[name] = 3;
}
} else {
var list = this.list;
for (var i = 0, o; o = list[i++];) {
o.onOff = false;
o.stop(option);
this.apps[o.name] = 3;
}
}
this.saveState();
};
/**
* 结束应用
* @param {String} name 应用名称
* @returns {Boolean}
*/
App.prototype.end = async function(name, option) {
if (name) {
var obj = this.list.get(name);
if (obj) {
obj.onOff = false;
obj.end(option);
this.apps[name] = 4;
}
} else {
var list = this.list;
for (var i = 0, o; o = list[i++];) {
o.onOff = false;
o.end(option);
this.apps[o.name] = 4;
}
}
this.saveState();
};
exports.App = App;
/**
* 创建全局管理器
*/
if (!$.pool.app) {
$.pool.app = {};
}
/**
* app管理器, 用于管理应用
* @param {string} scope 作用域
* @param {string} title 标题
* @return {Object} 返回一个缓存类
*/
function app_admin(scope, title) {
if (!scope) {
scope = $.val.scope + '';
}
var obj = $.pool.app[scope];
if (!obj) {
$.pool.app[scope] = new App(scope, title);
obj = $.pool.app[scope];
}
return obj;
}
/**
* @module 导出app管理器
*/
exports.app_admin = app_admin;