UNPKG

4.56 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.sendUpdate = undefined;
7exports.close = close;
8
9var _nightingale = require('nightingale');
10
11var _nightingale2 = _interopRequireDefault(_nightingale);
12
13var _os = require('os');
14
15var _socket = require('socket.io-client');
16
17var _socket2 = _interopRequireDefault(_socket);
18
19var _argv = require('./argv');
20
21var _config = require('./config');
22
23var _manager = require('./manager');
24
25var _display = require('./commands/display');
26
27var display = _interopRequireWildcard(_display);
28
29var _screen = require('./commands/screen');
30
31var screen = _interopRequireWildcard(_screen);
32
33var _networkInterface = require('./utils/networkInterface');
34
35var _networkInterface2 = _interopRequireDefault(_networkInterface);
36
37var _detectBoard = require('./utils/detectBoard');
38
39var _detectBoard2 = _interopRequireDefault(_detectBoard);
40
41var _update = require('./update');
42
43var _package = require('../package.json');
44
45function _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; } }
46
47function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
48
49const logger = new _nightingale2.default('app:client');
50
51const socket = _argv.serverHost && _argv.serverPort && (0, _socket2.default)(`${_argv.serverHost}:${_argv.serverPort}/raspberry-client`, {
52 reconnectionDelay: 500,
53 reconnectionDelayMax: 120000,
54 timeout: 4000,
55 transports: ['websocket']
56});
57
58// wait 5s before connecting, leave the time to start display
59setTimeout(() => {
60 logger.debug('Connecting', { serverHost: _argv.serverHost, serverPort: _argv.serverPort });
61 if (socket) {
62 socket.connect();
63 }
64}, 5000);
65
66const board = (0, _detectBoard2.default)();
67const rpiVersion = board === 'rpi' && board.info;
68
69const emit = (eventName, ...args) => {
70 if (!socket) {
71 logger.warn('cannot emit', { eventName, args });
72 return;
73 }
74
75 logger.debug('emit', { eventName, args });
76 return socket.emit(eventName, ...args);
77};
78
79if (socket) {
80 socket.on('connect_error', err => logger.error('connect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, errMessage: err.message }));
81 socket.on('reconnect_error', err => logger.debug('reconnect error', { serverHost: _argv.serverHost, serverPort: _argv.serverPort, err }));
82
83 socket.on('disconnect', () => logger.warn('disconnected'));
84
85 socket.on('reconnect', () => logger.success('reconnected'));
86
87 socket.on('connect', () => {
88 logger.success('connected');
89
90 const networkInterface = (0, _networkInterface2.default)();
91 const screenState = screen.getCurrentScreenState();
92 emit('hello', Object.assign({
93 configTime: (0, _config.getTime)(),
94 version: _package.version,
95 token: _argv.token,
96 userId: _argv.token, // deprecated
97 screenState }, networkInterface, {
98 hostname: (0, _os.hostname)(),
99 rpiVersion,
100 board,
101 screen: {
102 state: screenState,
103 screens: screen.getCurrentScreens()
104 },
105 availableDisplays: display.availableDisplays
106 }));
107 });
108
109 socket.on('updateConfig', _manager.onConfigUpdated);
110 socket.on('changeConfig', _manager.onConfigUpdated);
111
112 socket.on('selfUpdate', () => (0, _update.selfUpdate)());
113
114 socket.on('action', action => {
115 logger.info('received action', { action });
116 switch (action) {
117 case 'self-upgrade':
118 case 'self-update':
119 case 'selfUpdate':
120 return (0, _update.selfUpdate)();
121
122 case 'screen-off':
123 return screen.off();
124 case 'screen-on':
125 return screen.on();
126
127 case 'refresh':
128 return display.refresh();
129 }
130
131 logger.warn(`unknown action: ${action}`);
132 });
133
134 socket.on('screenshot', () => {
135 logger.info('screenshot');
136 const buffer = screen.screenshot();
137 if (!buffer) {
138 return;
139 }
140
141 logger.info('send screenshot');
142 socket.emit('screenshot', { image: true, buffer }, () => {
143 logger.info('screenshot callback');
144 });
145 });
146}
147
148const sendUpdate = exports.sendUpdate = data => {
149 emit('update', data);
150};
151
152function close() {
153 if (!socket || !socket.connected) {
154 return;
155 }
156
157 return new Promise(resolve => {
158 logger.info('Closing...');
159 socket.once('disconnect', () => {
160 logger.info('Closed');
161 resolve();
162 });
163 socket.close();
164 });
165}
166//# sourceMappingURL=client.js.map
\No newline at end of file