UNPKG

mm_os

Version:

这是超级美眉服务端框架,用于快速构建应用程序。

309 lines (286 loc) 6.79 kB
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;