UNPKG

@yhiot/utils

Version:
168 lines (134 loc) 4.17 kB
"use strict"; 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]; }