pooliot-client
Version:
166 lines (123 loc) • 4.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sendUpdate = undefined;
exports.close = close;
var _nightingale = require('nightingale');
var _nightingale2 = _interopRequireDefault(_nightingale);
var _os = require('os');
var _socket = require('socket.io-client');
var _socket2 = _interopRequireDefault(_socket);
var _argv = require('./argv');
var _config = require('./config');
var _manager = require('./manager');
var _display = require('./commands/display');
var display = _interopRequireWildcard(_display);
var _screen = require('./commands/screen');
var screen = _interopRequireWildcard(_screen);
var _networkInterface = require('./utils/networkInterface');
var _networkInterface2 = _interopRequireDefault(_networkInterface);
var _detectBoard = require('./utils/detectBoard');
var _detectBoard2 = _interopRequireDefault(_detectBoard);
var _update = require('./update');
var _package = require('../package.json');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const logger = new _nightingale2.default('app:client');
const socket = _argv.serverHost && _argv.serverPort && (0, _socket2.default)(`${_argv.serverHost}:${_argv.serverPort}/raspberry-client`, {
reconnectionDelay: 500,
reconnectionDelayMax: 120000,
timeout: 4000,
transports: ['websocket']
});
// wait 5s before connecting, leave the time to start display
setTimeout(() => {
logger.debug('Connecting', { serverHost: _argv.serverHost, serverPort: _argv.serverPort });
if (socket) {
socket.connect();
}
}, 5000);
const board = (0, _detectBoard2.default)();
const rpiVersion = board === 'rpi' && board.info;
const emit = (eventName, ...args) => {
if (!socket) {
logger.warn('cannot emit', { eventName, args });
return;
}
logger.debug('emit', { eventName, args });
return socket.emit(eventName, ...args);
};
if (socket) {
socket.on('connect_error', err => logger.error('connect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, errMessage: err.message }));
socket.on('reconnect_error', err => logger.debug('reconnect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, err }));
socket.on('disconnect', () => logger.warn('disconnected'));
socket.on('reconnect', () => logger.success('reconnected'));
socket.on('connect', () => {
logger.success('connected');
const networkInterface = (0, _networkInterface2.default)();
const screenState = screen.getCurrentScreenState();
emit('hello', Object.assign({
configTime: (0, _config.getTime)(),
version: _package.version,
token: _argv.token,
userId: _argv.token, // deprecated
screenState }, networkInterface, {
hostname: (0, _os.hostname)(),
rpiVersion,
board,
screen: {
state: screenState,
screens: screen.getCurrentScreens()
},
availableDisplays: display.availableDisplays
}));
});
socket.on('updateConfig', _manager.onConfigUpdated);
socket.on('changeConfig', _manager.onConfigUpdated);
socket.on('selfUpdate', () => (0, _update.selfUpdate)());
socket.on('action', action => {
logger.info('received action', { action });
switch (action) {
case 'self-upgrade':
case 'self-update':
case 'selfUpdate':
return (0, _update.selfUpdate)();
case 'screen-off':
return screen.off();
case 'screen-on':
return screen.on();
case 'refresh':
return display.refresh();
}
logger.warn(`unknown action: ${action}`);
});
socket.on('screenshot', () => {
logger.info('screenshot');
const buffer = screen.screenshot();
if (!buffer) {
return;
}
logger.info('send screenshot');
socket.emit('screenshot', { image: true, buffer }, () => {
logger.info('screenshot callback');
});
});
}
const sendUpdate = exports.sendUpdate = data => {
emit('update', data);
};
function close() {
if (!socket || !socket.connected) {
return;
}
return new Promise(resolve => {
logger.info('Closing...');
socket.once('disconnect', () => {
logger.info('Closed');
resolve();
});
socket.close();
});
}
//# sourceMappingURL=client.js.map
;