UNPKG

sicksync

Version:

Don’t accept the available as the preferable. Go extra mile with extra speed.

84 lines (63 loc) 2.35 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.WSClient = undefined; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _ws = require('ws'); var _ws2 = _interopRequireDefault(_ws); var _events = require('events'); var _remoteHelper = require('./remote-helper'); var _crypt = require('../crypt'); var _crypt2 = _interopRequireDefault(_crypt); var _events2 = require('../../conf/events'); var _events3 = _interopRequireDefault(_events2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const wsEvents = _events3.default.WS.LOCAL; const remoteEvents = _events3.default.REMOTE; class WSClient extends _events.EventEmitter { constructor(params) { super(); this._secret = params.secret; this._prefersEncrypted = params.prefersEncrypted; this._crypt = new _crypt2.default(this._secret); this._hostname = params.hostname; this._webSocketPort = params.websocketPort; this._username = params.username; this._startDevBox(); this._reconnect(); } _startDevBox() { this._devbox = new _remoteHelper.RemoteHelper({ secret: this._secret, websocketPort: this._webSocketPort, username: this._username, hostname: this._hostname, prefersEncrypted: this._prefersEncrypted, debug: this._debug }); } _connect() { this._ws = new _ws2.default('ws://' + this._hostname + ':' + this._webSocketPort); this._ws.on('open', _lodash2.default.partial(this.emit.bind(this), wsEvents.READY)); this._ws.on('close', this._handleDisconnect.bind(this)); this._ws.on('error', this._reconnect.bind(this)); } _handleDisconnect() { this.emit(wsEvents.DISCONNECTED); } _reconnect() { this.emit('reconnecting'); this._startDevBox(); this._devbox.start(); this._devbox.on(remoteEvents.READY, this._connect.bind(this)); this._devbox.on(remoteEvents.MESSAGE, _lodash2.default.partial(this.emit.bind(this), wsEvents.REMOTE_MESSAGE)); this._devbox.on(remoteEvents.NOT_FOUND, _lodash2.default.partial(this.emit.bind(this), wsEvents.REMOTE_NOT_FOUND)); } send(obj) { obj.secret = this._secret; this._ws.send(this._crypt.stringifyAndEncrypt(obj, this._prefersEncrypted)); } } exports.WSClient = WSClient;