sg-socket-client
Version:
Web socket client for SUGOS
107 lines (88 loc) • 7.37 kB
JavaScript
/**
* Extension for calling
* @mixin CallExtension
*/
;
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=