mm_os
Version:
这是超级美眉服务端框架,用于快速构建应用程序。
309 lines (286 loc) • 6.79 kB
JavaScript
const compressing = require('compressing');
const Item = require('mm_machine').Item;
const conf = require('mm_config');
/**
* APP应用驱动类
* @extends {Item}
* @class
*/
class Drive extends Item {
/**
* 构造函数
* @param {String} dir 当前目录
* @constructor
*/
constructor(dir) {
super(dir, __dirname);
this.default_file = "./app.json";
// 默认启用热更新
this.mode = 3;
/**
* 当前语言
*/
this.lang_now = "zh_CN";
/**
* 语言包
*/
this.lang = {};
/* 通用项 */
// 配置参数
this.config = {
// 名称, 由中英文和下“_”组成, 用于修改或卸载 例如: demo
// 同时也是版本唯一标识,当商城有两个应用名称相同时,可以通过版本号查询和下载
"name": "",
// 标题, 介绍事件作用
"title": "",
// 描述, 用于描述该事件有什么用的
"description": "",
// 版本号
"version": "1.0.0",
// 状态 0未启用,1启用
"state": 1,
// 文件路径, 当调用函数不存在时,会先从文件中加载
"func_file": "./app.js",
// 回调函数名 用于决定调用脚本的哪个函数
"func_name": "",
// 语言包路径
"lang_path": "./lang/",
// 指令前缀
"cmd": "",
// 是否中断执行
"end": true,
// 排序
"sort": 10,
// 配置
"options": []
};
// 配置
this.options = {};
}
}
/**
* 设置配置
* @param {Object} config 配置
*/
Drive.prototype.set_config = function(config) {
var file = this.filename;
var cg = Object.assign({}, this.config, config || {});
this.config = conf(cg, file);
}
/**
* 新建脚本
* @param {String} 文件
*/
Drive.prototype.new_script = function(file) {
var fl = __dirname + "/script.js";
if (fl.hasFile()) {
var text = fl.loadText();
if (text) {
var l = $.slash;
var name = file.between('app' + l, l) || 'sys';
text = text.replaceAll('{0}', name)
file.saveText(text);
}
}
};
/**
* 新建配置
* @param {String} file 文件
*/
Drive.prototype.new_config = function(file) {
var fl = __dirname + "/config.tpl.json";
if (fl.hasFile()) {
var text = fl.loadText();
if (text) {
var l = $.slash;
var name = file.between('app' + l, l) || 'sys';
text = text.replaceAll('{0}', name);
file.saveText(text);
}
}
};
/**
* 设置语言
* @param {Sting} lang
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.set_lang = function(lang) {
var msg = null;
if (!lang) {
lang = "zh_CN"
}
var file = this.config.lang_path + ".json";
if (file.hasFile()) {
var obj = file.loadJson();
if (obj) {
this.lang = obj;
} else {
msg = "语言包不是正确的json格式";
}
} else {
msg = "语言包文件不存在";
}
return msg;
};
/**
* 安装
* @param {Object} option 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.install = function(option) {
var msg = null;
return msg;
};
/**
* 重启设备
* @param {Object} option 配置
*/
Drive.prototype.restart = async function(option) {
await this.exec('stop');
await this.exec('start');
}
/**
* 初始化之前
* @param {Object} option
*/
Drive.prototype.init_before = async function(option) {
this.plugin = $.plugin_admin(this.config.name, this.config.title);
await this.plugin.update();
this.plugin.exec(null, 'init');
}
/**
* 初始化
* @param {Object} option 配置参数
* @return {String} 成功返回null, 否则返回错误提示
*/
Drive.prototype.init = function(option) {
var msg = null;
return msg;
};
/**
* 更新
* @param {Object} option 配置参数
* @return {String} 成功返回null, 否则返回错误提示
*/
Drive.prototype.update = function(option) {
var msg = null;
return msg;
};
/**
* 卸载
* @param {Object} option 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.uninstall = function(option) {
var msg = null;
return msg;
};
/**
* 启动
* @param {Object} opiton 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.start = function(opiton) {
var msg = null;
return msg;
};
/**
* 启动之后,启动插件
* @param {Object} opiton 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.start_after = async function(opiton) {
var msg = null;
this.plugin.run(null, 'start');
return msg;
};
/**
* 暂停
* @param {Object} opiton 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.stop = function(opiton) {
var msg = null;
return msg;
};
/**
* 结束
* @param {Object} opiton 配置参数
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.end = function(opiton) {
var msg = null;
return msg;
};
/**
* 商店(用于下载应用相关模块)
* @param {String} item 应用项
* @return {String} 成功返回null,否则返回错误提示
*/
Drive.prototype.store = function(item) {
var msg = null;
return msg;
};
/**
* 帮助(讲解应用使用方法)
* @param {String} item 帮助项
* @return {String} 返回使用方法明细
*/
Drive.prototype.help = function(item) {
var body = "";
return body;
};
/**
* 主程序
* @param {Object} param1 参数1
* @param {Object} param2 参数2
* @return {Object} 返回执行结果
*/
Drive.prototype.main = function(param1, param2) {
return null;
};
/**
* 指令(类似命令提示符)
* @param {String} content 指令内容
* @return {String} 执行结果
*/
Drive.prototype.cmd = function(content) {
var body = "";
return body;
};
/**
* 指令(类似命令提示符)
* @param {String} content 指令内容
* @return {String} 执行结果
*/
Drive.prototype.run_cmd = async function(content) {
if (!content) {
content = "";
}
var ret;
try {
ret = this.cmd(content);
} catch (err) {
$.log.error("运行应用指令失败!", this.config.name, err);
}
if (!ret) {
ret = "";
}
return ret;
};
/**
* 压缩应用
* @param {String} 要压缩的目录
* @returns {String} 打包成功返回压缩包文件地址
*/
Drive.prototype.zip = async function(zip_dir = "/static/file/zip/") {
var dir = this.filename.dirname();
var file = ("./" + this.config.name + '.zip').fullname(zip_dir);
file.addDir();
var done = await compressing.zip.compressDir(dir, file);
if (file.hasFile()) {
return file;
}
return null;
}
module.exports = Drive;