mm_connector
Version:
这是超级美眉游戏连接器,用于连接客户端和服务端,实现前后端安全通讯。
193 lines (177 loc) • 4.14 kB
JavaScript
const Index = require('mm_machine').Index;
const Drive = require('./drive');
/**
* Plugin插件类
* @extends {Index}
* @class
*/
class Plugin extends Index {
/**
* 构造函数
* @param {Object} scope 作用域
* @param {String} title 标题
* @constructor
*/
constructor(scope, title) {
super(scope, __dirname);
this.Drive = Drive;
this.type = "plugin";
this.title = title;
}
}
/**
* 执行程序
* @param {Object} param1 参数1
* @param {Object} param2 参数2
* @return {Object} 返回执行结果
*/
Plugin.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} from_user 发送消息人
* @param {String} to_user 接收消息人
* @param {String} content 内容
* @param {String} group 群组 如果是个人,群组为空
* @param {Number} type 群类型, 1永久会话/群、2临时会话/群
* @param {String} msg_type 消息类型, event事件型、message消息型。默认消息型
* @param {Object} 数据管理器
* @return {String} 回复内容
*/
Plugin.prototype.chat = async function(from_user, to_user, group, content, type, msg_type, db) {
var ret = "";
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
if (o.onOff) {
ret = await o.chat(from_user, to_user, group, content, type, msg_type, db);
if (ret) {
break;
}
}
}
return ret;
};
/**
* 指令(类似命令提示符)
* @param {String} content 指令内容
* @return {String} 执行结果
*/
Plugin.prototype.cmd = async function(content) {
var ret = "";
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
if (o.onOff) {
var cmd = o.config.cmd;
if (cmd && content.startsWith(cmd)) {
ret = await o.cmd(content.replace(cmd, ''));
if (ret) {
break;
}
}
}
}
return ret;
};
/**
* 执行插件方法
* @param {String} name 插件名称
* @param {String} method 方法名称
* @param {Object} option 配置参数
* @return {String} 执行结果
*/
Plugin.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} 执行结果
*/
Plugin.prototype.init = function(option) {
var ret = "";
var lt = this.list;
for (var i = 0, o; o = lt[i++];) {
ret = o.init(option);
}
return ret;
};
Plugin.prototype.sort = function() {
this.list.sortBy('sort');
};
/**
* 加载插件
* @param {String} path 检索路径
* @param {Boolean} isApp 是否APP
*/
Plugin.prototype.load = function(path) {
if (!path) {
path = '/app/' + this.scope;
}
list = this.list;
var dir_plugin = path + "/plugin/";
if (dir_plugin.hasDir()) {
var list_scope = $.dir.get(dir_plugin);
// 遍历目录路径
list_scope.map(function(o) {
var file = './plugin.json'.fullname(o);
if (file.hasFile()) {
var obj = new Drive(o);
obj.load(file);
if (obj.config.name) {
list.push(obj);
}
}
});
}
};
exports.Plugin = Plugin;
/**
* 创建全局管理器
*/
if (!$.pool.plugin) {
$.pool.plugin = {};
}
/**
* plugin管理器, 用于管理插件
* @param {string} scope 作用域
* @param {string} title 标题
* @return {Object} 返回一个缓存类
*/
function plugin_admin(scope, title) {
if (!scope) {
scope = $.val.scope + '';
}
var obj = $.pool.plugin[scope];
if (!obj) {
$.pool.plugin[scope] = new Plugin(scope, title);
obj = $.pool.plugin[scope];
}
return obj;
}
/**
* @module 导出plugin管理器
*/
exports.plugin_admin = plugin_admin;