UNPKG

ptt-client

Version:

A Node client for fetching data from ptt.cc.

113 lines (86 loc) 3.64 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _eventemitter = _interopRequireDefault(require("eventemitter3")); var Socket = /*#__PURE__*/ function (_EventEmitter) { (0, _inherits2["default"])(Socket, _EventEmitter); function Socket(config) { var _this; (0, _classCallCheck2["default"])(this, Socket); _this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(Socket).call(this)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_config", void 0); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_socket", void 0); _this._config = config; return _this; } (0, _createClass2["default"])(Socket, [{ key: "connect", value: function connect() { var _this2 = this; var socket; if (typeof WebSocket === 'undefined') { throw new Error("'WebSocket' is undefined. Do you include any websocket polyfill?"); } else if (WebSocket.length === 1) { socket = new WebSocket(this._config.url); } else { var options = {}; if (this._config.origin) { options.origin = this._config.origin; } socket = new WebSocket(this._config.url, options); } socket.addEventListener('open', this.emit.bind(this, 'connect')); socket.addEventListener('close', this.emit.bind(this, 'disconnect')); socket.addEventListener('error', this.emit.bind(this, 'error')); var data = []; var timeoutHandler; socket.binaryType = 'arraybuffer'; socket.addEventListener('message', function (_ref) { var _data; var currData = _ref.data; clearTimeout(timeoutHandler); (_data = data).push.apply(_data, (0, _toConsumableArray2["default"])(new Uint8Array(currData))); timeoutHandler = setTimeout(function () { _this2.emit('message', data); data = []; }, _this2._config.timeout); if (currData.byteLength > _this2._config.blobSize) { throw new Error("Receive message length(".concat(currData.byteLength, ") greater than buffer size(").concat(_this2._config.blobSize, ")")); } }); this._socket = socket; } }, { key: "disconnect", value: function disconnect() { var socket = this._socket; socket.close(); } }, { key: "send", value: function send(str) { var socket = this._socket; if (socket.readyState === 1 /* OPEN */ ) { socket.send(str); } } }]); return Socket; }(_eventemitter["default"]); var _default = Socket; exports["default"] = _default;