UNPKG

sg-socket-client

Version:
107 lines (88 loc) 7.37 kB
/** * Extension for calling * @mixin CallExtension */ 'use strict'; var _regeneratorRuntime = require("@babel/runtime/regenerator"); var _JSON$stringify = require("@babel/runtime/core-js/json/stringify"); var _Promise = require("@babel/runtime/core-js/promise"); var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator"); var _Object$freeze = require("@babel/runtime/core-js/object/freeze"); var _require = require('sg-socket-constants'), AcknowledgeStatus = _require.AcknowledgeStatus; var OK = AcknowledgeStatus.OK, NG = AcknowledgeStatus.NG; /** @lends CallExtension */ var CallExtension = _Object$freeze({ /** * Send and wait for reply * @param {string} event - Name of event to send. * @param {Object} data - Data to send. * @param {Object} [options] * @param {number} [options.timeout] - Timeout * @returns {Promise} - Reply from server. */ call: function () { var _call = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee(event, data) { var _this = this; var options, timeout, _args = arguments; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: options = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}; timeout = options.timeout; _context.next = 4; return new _Promise(function (resolve, reject) { var done = false; var timer = null; function unlessDone(action) { if (done) { return; } action(); clearTimeout(timer); done = true; } if (timeout) { timer = setTimeout(function () { unlessDone(function () { return reject(new Error('[sg-socket-client] Calling timeout')); }); }, timeout).unref(); } _this.emit(event, data, function (reply) { var status = reply.status, payload = reply.payload; if (status === NG) { var message = "".concat(payload.message || payload, " ( event: \"").concat(event, "\", data: \"").concat(_JSON$stringify(data), "\" )"); unlessDone(function () { return reject(new Error(message)); }); return; } unlessDone(function () { return resolve(reply); }); }); }); case 4: return _context.abrupt("return", _context.sent); case 5: case "end": return _context.stop(); } } }, _callee, this); })); return function call(_x, _x2) { return _call.apply(this, arguments); }; }() }); module.exports = CallExtension; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImV4dGVuc2lvbnMvY2FsbF9leHRlbnNpb24uanMiXSwibmFtZXMiOlsicmVxdWlyZSIsIkFja25vd2xlZGdlU3RhdHVzIiwiT0siLCJORyIsIkNhbGxFeHRlbnNpb24iLCJjYWxsIiwiZXZlbnQiLCJkYXRhIiwib3B0aW9ucyIsInRpbWVvdXQiLCJyZXNvbHZlIiwicmVqZWN0IiwiZG9uZSIsInRpbWVyIiwidW5sZXNzRG9uZSIsImFjdGlvbiIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJFcnJvciIsInVucmVmIiwiZW1pdCIsInJlcGx5Iiwic3RhdHVzIiwicGF5bG9hZCIsIm1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OztBQUlBOzs7Ozs7Ozs7Ozs7ZUFFNEJBLFFBQVEscUJBQVIsQztJQUFyQkMsaUIsWUFBQUEsaUI7O0lBQ0FDLEUsR0FBVUQsaUIsQ0FBVkMsRTtJQUFJQyxFLEdBQU1GLGlCLENBQU5FLEU7QUFFWDs7QUFDQSxJQUFNQyxnQkFBZ0IsZUFBYztBQUNsQzs7Ozs7Ozs7QUFRTUMsTUFUNEI7QUFBQTtBQUFBO0FBQUEsOENBU3RCQyxLQVRzQixFQVNmQyxJQVRlO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTVEMscUJBVFMsMkRBU0MsRUFURDtBQVV6QkMscUJBVnlCLEdBVWRELE9BVmMsQ0FVekJDLE9BVnlCO0FBQUE7QUFBQSxxQkFXbkIsYUFBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDNUMsb0JBQUlDLE9BQU8sS0FBWDtBQUNBLG9CQUFJQyxRQUFRLElBQVo7O0FBRUEseUJBQVNDLFVBQVQsQ0FBcUJDLE1BQXJCLEVBQTZCO0FBQzNCLHNCQUFJSCxJQUFKLEVBQVU7QUFDUjtBQUNEOztBQUNERztBQUNBQywrQkFBYUgsS0FBYjtBQUNBRCx5QkFBTyxJQUFQO0FBQ0Q7O0FBRUQsb0JBQUlILE9BQUosRUFBYTtBQUNYSSwwQkFBUUksV0FBVyxZQUFNO0FBQ3ZCSCwrQkFBVztBQUFBLDZCQUFNSCxPQUFPLElBQUlPLEtBQUosQ0FBVSxvQ0FBVixDQUFQLENBQU47QUFBQSxxQkFBWDtBQUNELG1CQUZPLEVBRUxULE9BRkssRUFFSVUsS0FGSixFQUFSO0FBR0Q7O0FBRUQsc0JBQUtDLElBQUwsQ0FBVWQsS0FBVixFQUFpQkMsSUFBakIsRUFBdUIsVUFBQ2MsS0FBRCxFQUFXO0FBQUEsc0JBQ3pCQyxNQUR5QixHQUNORCxLQURNLENBQ3pCQyxNQUR5QjtBQUFBLHNCQUNqQkMsT0FEaUIsR0FDTkYsS0FETSxDQUNqQkUsT0FEaUI7O0FBRWhDLHNCQUFJRCxXQUFXbkIsRUFBZixFQUFtQjtBQUNqQix3QkFBTXFCLG9CQUFhRCxRQUFRQyxPQUFSLElBQW1CRCxPQUFoQyx5QkFBcURqQixLQUFyRCx5QkFBdUUsZ0JBQWVDLElBQWYsQ0FBdkUsU0FBTjtBQUNBTywrQkFBVztBQUFBLDZCQUFNSCxPQUFPLElBQUlPLEtBQUosQ0FBVU0sT0FBVixDQUFQLENBQU47QUFBQSxxQkFBWDtBQUNBO0FBQ0Q7O0FBQ0RWLDZCQUFXO0FBQUEsMkJBQU1KLFFBQVFXLEtBQVIsQ0FBTjtBQUFBLG1CQUFYO0FBQ0QsaUJBUkQ7QUFTRCxlQTVCWSxDQVhtQjs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsQ0FBZCxDQUF0Qjs7QUEyQ0FJLE9BQU9DLE9BQVAsR0FBaUJ0QixhQUFqQiIsImZpbGUiOiJleHRlbnNpb25zL2NhbGxfZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXh0ZW5zaW9uIGZvciBjYWxsaW5nXG4gKiBAbWl4aW4gQ2FsbEV4dGVuc2lvblxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge0Fja25vd2xlZGdlU3RhdHVzfSA9IHJlcXVpcmUoJ3NnLXNvY2tldC1jb25zdGFudHMnKVxuY29uc3Qge09LLCBOR30gPSBBY2tub3dsZWRnZVN0YXR1c1xuXG4vKiogQGxlbmRzIENhbGxFeHRlbnNpb24gKi9cbmNvbnN0IENhbGxFeHRlbnNpb24gPSBPYmplY3QuZnJlZXplKHtcbiAgLyoqXG4gICAqIFNlbmQgYW5kIHdhaXQgZm9yIHJlcGx5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIE5hbWUgb2YgZXZlbnQgdG8gc2VuZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhIHRvIHNlbmQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXRdIC0gVGltZW91dFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gLSBSZXBseSBmcm9tIHNlcnZlci5cbiAgICovXG4gIGFzeW5jIGNhbGwgKGV2ZW50LCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7dGltZW91dH0gPSBvcHRpb25zXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBkb25lID0gZmFsc2VcbiAgICAgIGxldCB0aW1lciA9IG51bGxcblxuICAgICAgZnVuY3Rpb24gdW5sZXNzRG9uZSAoYWN0aW9uKSB7XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uKClcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICBkb25lID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHVubGVzc0RvbmUoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignW3NnLXNvY2tldC1jbGllbnRdIENhbGxpbmcgdGltZW91dCcpKSlcbiAgICAgICAgfSwgdGltZW91dCkudW5yZWYoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoZXZlbnQsIGRhdGEsIChyZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7c3RhdHVzLCBwYXlsb2FkfSA9IHJlcGx5XG4gICAgICAgIGlmIChzdGF0dXMgPT09IE5HKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke3BheWxvYWQubWVzc2FnZSB8fCBwYXlsb2FkfSAoIGV2ZW50OiBcIiR7ZXZlbnR9XCIsIGRhdGE6IFwiJHtKU09OLnN0cmluZ2lmeShkYXRhKX1cIiApYFxuICAgICAgICAgIHVubGVzc0RvbmUoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdW5sZXNzRG9uZSgoKSA9PiByZXNvbHZlKHJlcGx5KSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBDYWxsRXh0ZW5zaW9uXG4iXX0=