@yhiot/utils
Version:
168 lines (134 loc) • 4.17 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.replacer = replacer;
exports.reviver = reviver;
exports.init = init;
exports.$rpc = $rpc;
exports.default = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _getType = require("./getType");
var _console = _interopRequireDefault(require("console"));
var jayson = require('jayson/promise');
function replacer(key, value) {
if (value instanceof RegExp) return '__REGEXP ' + value.toString();else return value;
}
function reviver(key, value) {
if ((0, _getType.getType)(value) === 'string') {
if (value.toString().indexOf('__REGEXP ') == 0) {
var m = value.split('__REGEXP ')[1].match(/\/(.*)\/(.*)?/);
return new RegExp(m[1], m[2] || '');
}
}
return value;
}
var Client =
/**
* 构造函数
* @param {array} ops 操作列表
* @param {json} cfg 配置{protocol:'tcp/http',host:'localhost',port} protocol默认为tcp,host默认为localhost
*/
function Client(ops, cfg) {
var _this = this;
(0, _classCallCheck2.default)(this, Client);
this.cfg = cfg;
var client = null;
switch (cfg.protocol) {
case 'http':
client = jayson.client.http({
port: cfg.port,
host: cfg.host || 'localhost',
reviver: reviver,
replacer: replacer
});
break;
case 'tcp':
default:
client = jayson.client.tcp({
port: cfg.port,
host: cfg.host || 'localhost',
reviver: reviver,
replacer: replacer
});
break;
}
this.client = client;
var _loop = function _loop(i) {
var opname = ops[i];
_this[opname] = /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
var ret,
argsToArray,
result,
_args = arguments;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
ret = null;
_context.prev = 1;
argsToArray = Array.prototype.slice.apply(_args); // console.log('jaysonClient ', {
// opname,
// args: argsToArray,
// client: !!client,
// });
_context.next = 5;
return client.request(opname, argsToArray);
case 5:
ret = _context.sent;
_context.next = 12;
break;
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](1);
_console.default.error('jaysonClient error:', opname, _args, _context.t0);
throw {
errcode: -1,
message: _context.t0.message
};
case 12:
result = ret && ret.result;
if (!(result && result.errcode)) {
_context.next = 15;
break;
}
throw result;
case 15:
return _context.abrupt("return", result);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 8]]);
})).bind(_this);
};
for (var i = 0; i < ops.length; i++) {
_loop(i);
}
}; // 供初始化jayson 客户端.
exports.default = Client;
var clients = {};
/**
* 初始化微服务列表
* @param {json} cfgs {iotdevice: {ops, protocol, port, host}}
*/
function init(cfgs) {
var names = Object.getOwnPropertyNames(cfgs);
for (var i = 0; i < names.length; i++) {
var name = names[i];
var cfg = cfgs[name];
clients[name] = new Client(cfg.ops, {
protocol: cfg.protocol,
port: cfg.port,
host: cfg.host
});
}
return clients;
}
function $rpc(name) {
return clients[name];
}