sicksync
Version:
Don’t accept the available as the preferable. Go extra mile with extra speed.
84 lines (63 loc) • 2.35 kB
JavaScript
'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;