ptt-client
Version:
A Node client for fetching data from ptt.cc.
113 lines (86 loc) • 3.64 kB
JavaScript
;
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;